redis相关知识

为什么使用Redis

Redis是NoSQL(非关系型数据库)类型数据库,在NoSQL数据库中数据之间是无联系的,无关洗的,数据的结构是松散的,可变的。

关系型数据库的瓶颈:

就像MySQL就是关系型数据库

(1)无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据的是 IO密集的应用。硬盘 IO 也变为性能瓶颈

(2)表中存储记录数量有限,横向可扩展能力有限,一张表最大二百多列。纵向数据可承受能力也是有限的,一张表的数据到达百万级,读写的速度就会逐渐的下降。面对海量数据, 必须使用主从复制,分库分表。这样的系统架构是难以维护的。

大数据查询 SQL 效率极低,数据量到达一定程度时,查询时间会呈指数级别增长

(3)无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据。

(4)关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大。

因为关系型数据库有这些瓶颈,因此目前在互联网领域海量数据的项目中NoSQL应用非常的广泛

非关系型数据库优势:

  • 大数据量,高性能

    NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。关系型数据库(例如 MySQL)使用查询缓存。这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。 缓存的性能不高。NoSQL 的缓存性能要高的多。

  • 灵活的数据模型

    NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。

  • 高可用

    NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL) 在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。

    MySQL 和 NoSQL 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库关注在关系上,NoSQL 关注在存储上。

  • 低成本

    这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的 License 成本

非关系型数据库的劣势:

  • 无关系,数据之间是无联系的

  • 不支持标准的 SQL,没有公认的 NoSQL 标准

  • 没有关系型数据库的约束,大多数也没有索引的概念

  • 没有事务,不能依靠事务实现 ACID.

  • 没有丰富的数据类型(数值,日期,字符,二进制,大文本等)

Redis安装和使用

Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库

Redis介绍:Remote Dictionary Server(Redis) 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的 Key-Value 数据库. Key 字符类型,其值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所以它通常也被称为数据结构服务器。

官网:https://redis.io/

中文:http://www.redis.cn/

Redis下载地址:http://www.redis.cn/download.html

安装步骤:https://www.cnblogs.com/jia-hao/p/15763482.html

redis的开启和关闭

开启

前台启动:./redis-server

后台启动:./redis-server &

1.前台启动下:启动redis的服务器端,切换到src目录下执行redis-server程序,如果以前台的方式启动,则不能退出当前窗口,如果退出窗口,应用就会终止。

2.后台启动下,在src目录下执行./redis-server & 然后这时候关闭窗口,查看redis进程,依然存在。ps -ef | grep redis

如果安装的时候执行了make install 语句,则不需要必须在src目录下执行。

关闭Redis

1.执行redis-cli shutdown 这种方式下redis先完成数据操作,然后在关闭。推荐使用

2.kill pid 或者 kill -9 pid,这种不会考虑当前是否有数据正在执行操作,直接关闭应用。

Redis操作命令

基本命令

  1. 沟通命令,查看状态:ping

    输入ping,redis会返回PONG,表示redis服务运行正常。

  2. 查看当前数据库中key的数目:dbsize

    语法:dbsize

    作用:返回当前数据库的key的数量

  3. Redis默认使用16个库,从0到15,如果对数据库的个数进行修改,在redis.conf文件中,修改databases 16语句中的数字

  4. 切换数据库:select index

    命令:select n

  5. 删除当前库的所有数据:flushdb

  6. redis自带的客户端退出当前redia连接:exit或者quit

Key的操作命令

keys:

语法:keys pattern

作用:查找所有符合模式pattern的key,pattern可以使用通配符

通配符:

*:表示0-多个字符,例如:keys * 查询所有的key,keys w* 查询所有以w开头的key

?: 表示单个字符,例如:wo?d,匹配word,wood等等。

exists

语法:exists key [key....]

作用:判断key是否存在

返回值:整数,存在key返回1,其他返回0,使用多个key时,返回存在的key的数量。

expire

语法:expire key seconds

作用:设置key的生存时间,如果超过时间,key自动删除,单位为秒

返回值:设置成功返回数字1,其他情况则为0.

例:已存在一个key为k1,设置其生存时间为10秒,则 expire k1 10

ttl

语法:ttl key

作用:以秒为单位,返回key的剩余生存时间

返回值:-1:没有设置key的生存时间,key永不过期

-2:key不存在

数字:key的剩余时间,以秒为单位

type

语法:type key

作用:查看key所存储值的数据类型

返回值:字符串表示的数据类型

1)none key不存在

2)string 字符串

3)list 列表

4)set 集合

5)zset 有序集

6)hash 哈希表

del

语法:del key [key......]

作用:删除存在的key,不存在的key忽略

返回值:数字,删除的key的数量

redis的5种数据类型

字符串数据类型string

字符串类型是Redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片,最大是512M

哈希类型hash:

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

列表类型list

Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。

集合类型set

Redis的Set是string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据。

有序集合类型zset(sorted set)

Redis有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员,不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

Redis数据类型操作命令

字符串类型(string)

基本命令

set

将字符串值value设置到key中

语法:set key value

向已经存在的key设置新的value,会覆盖原来的值。

get

获取key中设置的字符串值

语法:get key

incr

将key中存储的数字值加1,如果key不存在,则key的值先被初始化为0再执行incr操作(只能对数字类型的数据操作),返回加1后的结果

语法:incr key

decr

将key中存储的数字值减1,如果key不存在,则key的值先被初始化为0再执行decr操作(只能对数字类型的数据操作),返回减1后的结果

append

语法:append key value

说明:如果key存在,则将value追加到key原来旧值的末尾,如果key不存在,则将key设置的值为value

返回值:追加字符串之后的总长度

常用命令

strlen

语法:strlen key

说明:返回key所存储的字符串值的长度

返回值:如果key存在,返回字符串值的长度,如果key不存在,返回0.

getrange

语法:getrange key start end

作用:获取key中字符串值从start到end结束的字符串,包括start和end,负数表示从字符串的末尾开始,-1表示最后一个字符

返回值:截取的子字符串

setrange

语法:setrange key offset value

说明:用value覆盖(替代)key的存储得值从offset开始,不存在的key做空白字符串。

返回值:修改后的字符串的长度

mset

语法:mset key value [key value....]

说明:同时设置一个或者多个 key-value对

返回值:ok

mget

语法:mget key [key....]

作用:获取所有(一个或者多个)给定key的值

返回值:包含所有key的列表

哈希类型hash

redis中hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

基本命令

hset

语法:hset hash表的key field value

作用:将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。

返回值:1.如果field是hash表中新field,且设置成功,返回1

2.如果field已经存在,旧值覆盖新值,返回0

hget

语法:hget key field

作用:获取哈希表key中给定域field的值

返回值:field域的值,如果key不存在或者field不存在返回nil

hmset

语法:hmset key field value [field value.....]

说明:同时将多个field-value(域-值)设置到哈希表key中,此命令会覆盖已经存在field,如果hash 表 key 不存在,创建空的 hash 表,执行 hmset.

返回值:设置成功返回ok,如果失败返回一个错误。

hmget

语法:hmget key field [field....]

作用:获取哈希表key中一个或多个给定域的值

返回值:返回和field顺序对应的值,如果field不存在,返回nil

hgetall

语法:hgetall key

作用:获取哈希表key中所有的域和值

返回值:以列表形式返回hash中的域和域的值,如果key不存在,则返回空hash

hdel

语法:hdel key field [field....]

作用:删除哈希表key中的一个或者多个指定域field,不存在的field直接忽略

返回值:成功删除的field的数量

常用命令

hkeys

语法:hkeys key

作用:查看哈希表key中的所有的field域

返回值:包含所有的field的列表,key不存在的话返回空列表

hvals

语法:hvals key

作用:返回哈希表中所有域的值

返回值:包含哈希表所有域值的列表,key不存在的话返回空列表

hexists

语法:hexists key field

作用:查看哈希表key中,给定域field是否存在

返回值:如果field存在,返回1,其他情况返回0

列表类型list

Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。

基本命令

lpush

语法:lpush key value [value......]

作用:将一个或者多个值value插入到列表key的表头(最左边),从左边开始加入智,从左到右的顺序依次插入到表头。

返回值:数字,新列表的长度

rpush

语法:rpush key value [value......]

作用:将一个或多个值value插入到列表key的表尾(最右边),各个value值按从左到右的顺序依次插入到表尾

返回值:数字,新列表的长度

lrange

语法:lrange key start stop

作用:获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 start ,stop 超出列表的范围不会出现错误。

返回值:指定区间的列表

list

语法:lindex key index

作用:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

返回值:指定下标的元素,index不在列表范围,则返回nil

llen

语法:llen key

作用:获取列表key的长度

返回值:数值,列表的长度,key不存在的话返回0

常用命令

lrem

语法:lrem key count value

作用:根据参数 count 的值,移除列表中与参数 value 相等的元素, count >0 ,从列表的左侧向右开始移除; count < 0 从列表的尾部开始移除;count = 0 移除表中所有与 value 相等的值。(例:count=2,表示从左侧开始找两个与value相同的元素删除,count=-2,从右侧开始找两个与value相同的元素删除)

返回值:数值,移除的元素个数

lset

语法:lset key index value

作用:将列表key下标为index的元素的值设置为value

返回值:设置成功返回 ok ; key 不存在或者 index 超出范围返回错误信息

linsert

语法:linsert key BEFORE|ALFTER pivot value

作用:将值value插入到列表key当中位于值pivot之前或之后的位置,如果key不存在,或者pivot不在列表中,则不执行任何操作

返回值:命令执行成功,返回新列表的长度,如果没有找到pivot,返回-1,如果key不存在,返回0.

集合类型set

redis的set是string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据。

基本命令

sadd

语法:sadd key memeber [member]

作用:将一个或者多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略,不会再加入

返回值:加入到集合的新元素的个数,不包括被忽略的元素。

smembers

语法:smembers key

作用:获取集合key中的所有成员元素,不存在的key视为空集合

sismember

语法:sismember key member

作用:判断member元素是否是集合key的成员

返回值:member是集合成员返回1,其他返回0

scard

语法:scard key

作用:获取集合里面的元素个数

返回值:数字,key的元素个数,其他情况返回0

srem

语法:srem key member [member....]

作用:删除集合key中的一个或多个member元素,不存在的元素被忽略。

返回值:数字,成功删除的元素个数,不包括被忽略的元素。

常用命令

srandmember

语法:srandmember key [count]

作用:只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count 时,count 正数, 返回包含 count 个数元素的集合, 集合元素各不相同。count 是负数,返回一个 count 绝对值的长度的集合, 集合中元素可能会重复多次。

返回值:一个元素;多个元素的集合

spop

语法:spop key [count]

作用:随机从集合中删除一个元素,count是删除的元素个数。

返回值:被删除的元素,key不存在或空集合返回nil

有序集和类型zset(sorted set)

redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

不同的是 zset 的每个元素都会关联一个分数|数值(分数可以重复),redis 通过分数|数值来为集合中的成员进行从小到大的排序。

基本命令

zadd

语法:zadd key score member [score member…]

作用:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member

存在集合中,则更新值;score 可以是整数或浮点数

返回值:数字,将添加的元素个数

zrange

语法:zrange key start stop [WITHSCORES]

作用:查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。 start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回。

返回值:自定区间的成员集合

zrevrange

语法:zrevrange key start stop [withscores]

作用:返回有序集key中,指定区间内的成员,其中成员的位置按score值递减(从大到小)来排列(与zrange排列顺序相反)其他都和zrange命令一样。

返回值:自定区间的成员集合

zrem

语法:zrem key member [member.....]

作用:删除有序集合key中的一个或多个成员,不存在的成员被忽略

返回值:被成功删除的成员数量,不包括被忽略的成员

zcard

语法:zcard key

作用:获取有序集key的元素成员的个数

返回值:key存在返回集合元素的个数,key不存在,返回0

常用命令

zrangebyscore

语法:zrangebyscore key min max [withscores] [limit offset count]

作用:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成员,有序成员是按递增(从小到大)排序。min ,max 是包括在内 , 使用符号“ (” 表示不包括。 min , max 可以使用 -inf +inf 表示最小和最大 ,limit 用来限制返回结果的数量和区间。withscores 显 示 score 和 value,limit用来显示分页,offset表示起始位置,count表示要显示的数据数量

返回值:指定区间的集合数据

zrevrangebyscore

语法:zrevrangebyscore key max min [withscores] [limit offset count]

作用:返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。其他同 zrangebyscore

zcount

语法:zcount key min max

作用:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量

高级话题

事务

事务操作的命令

multi

语法:multi

作用:标记一个事务的开始,事务内的多条命令会按照先后顺序被放进一个队列当中

返回值:总是返回ok

exec

语法:exec

作用:执行所有事物块内的命令

返回值:事务内所有执行语句内容,事务被打断(影响)返回nil

discard

语法:discard

作用:取消事务,放弃执行事务块内的所有命令

返回值:总是返回ok

watch

语法:watch key [key......]

作用:监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。

返回值:总是返回ok

unwatch

语法:unwatch

作用:取消watch命令对所有key的监视,如果在执行watch命令之后,exec命令或discard命令先被执行了的话,那么就不需要再执行unwatch了

返回值:总是返回ok

持久化

持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。

Redis 的数据存储在内存中,内存是瞬时的,如果 linux 宕机或重启,又或者 Redis 崩溃或重启,所有的内存数据都会丢失,为解决这个问题,Redis 提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。

RDB方式持久化

Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。

RDB 保存了在某个时间点的数据集(全部数据)。存储在一个二进制文件中,只有一个文件。默认是 dump.rdb。RDB 技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响 Redis 的正常使用。RDB 恢复数据时比其他 AOF 速度快。

RDB方式优缺点

优点:由于存储的是数据快照文件,恢复数据很方便,也比较快

缺点:

1)会丢失最后一次快照以后更改的数据。如果你的应用能容忍一定数据的丢失,那么使用 rdb 是不错的选择;如果你不能容忍一定数据的丢失,使用 rdb 就不是一个很好的选择。

2)由于需要经常操作磁盘,RDB 会分出一个子进程。如果你的 redis 数据库很大的话, 子进程占用比较多的时间,并且可能会影响 Redis 暂停服务一段时间(millisecond 级别),如果 你的数据库超级大并且你的服务器 CPU 比较弱,有可能是会达到一秒。

AOF方式持久化

Append-only File(AOF),Redis 每次接收到一条改变数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。

总结:1.append-only 文件是另一个可以提供完全数据保障的方案;

2.AOF 文件会在操作过程中变得越来越大。比如,如果你做一百次加法计算,最后你只会 在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录对 最终的结果是无用的;但 Redis 支持在不影响服务的前提下在后台重构 AOF 文件,让文件得以 整理变小

3.可以同时使用这两种方式,redis 默认优先加载 aof 文件(aof 数据最完整);

主从复制读写分离

通过持久化功能,Redis 保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了, 也会导致数据丢失。

为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上

Redis 提供了复制(replication)功能来自动实现多台 redis 服务器的数据同步(每天19 点 新闻联播,基本从 cctv1-8,各大卫视都会播放)

我们可以通过部署多台 redis,并在配置文件中指定这几台 redis 之间的主从关系,主负责写入数据, 同时把写入的数据实时同步到从机器, 这种模式叫做主从复制, 即master/slave,并且 redis 默认 master 用于写,slave 用于读,向 slave 写数据会导致错误

主从复制的实现(master/slave)

方式 1:修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系

方式 2: ./redis-server --slaveof <master-ip> <master-port>,在启动 redis 时指定当前服务成为某个主 Redis 服务的从 Slave

方式1的实现步骤

模拟多 Reids 服务器, 在一台已经安装 Redis 的机器上,运行多个 Redis 应用模拟多个 Reids 服务器。一个 Master,两个 Slave.

A、新建三个 Redis 的配置文件

如果 Redis 启动,先停止。

作为 Master 的 Redis 端口是 6380

作为 Slaver 的 Redis 端口分别是 6382 , 6384

从原有的 redis.conf 拷贝三份,分别命名为 redis6380.conf, redis6382.conf , redis6384.conf

B、 编辑 Master 配置文件

编辑 Master 的配置文件 redis6380.conf : 在空文件加入如下内容

include /usr/local/redis-3.2.9/redis.conf

daemonize yes port 6380

pidfile /var/run/redis_6380.pid logfile 6380.log

dbfilename dump6380.rdb

配置项说明:

include : 包含原来的配置文件内容。/usr/local/redis-3.2.9/redis.conf 按照自己的目录设置。

daemonize:yes 后台启动应用,相当于 ./redis-server & , &的作用。

port : 自定义的端口号

pidfile : 自定义的文件,表示当前程序的 pid ,进程 id。

logfile:日志文件名

dbfilename:持久化的 rdb 文件名

C、 编辑 Slave 配置文件

编辑 Slave 的配置文件 redis6382.conf 和 redis6384.conf: 在空文件加入如下内容

①:redis6382.conf:

include /usr/local/redis-3.2.9/redis.conf

daemonize yes

port 6382

pidfile /var/run/redis_6382.pid logfile 6382.log

dbfilename dump6382.rdb slaveof 127.0.0.1 6380

配置项说明:

slaveof : 表示当前 Redis 是谁的从。当前是 127.0.0.0 端口 6380 这个 Master 的从。

②:redis6384.conf:

include /usr/local/redis-3.2.9/redis.conf daemonize yes

port 6384

pidfile /var/run/redis_6384.pid logfile 6384.log

dbfilename dump6384.rdb

slaveof 127.0.0.1 6380

D、启动服务器 Master/Slave 都启动

启动方式 ./redis-server 配置文件 (./redis-server ../redis6380.conf)(./redis-server ../redis6382.conf)(./redis-server ../redis6384.conf)

启动 Redis,并查看启动进程 ps -ef | grep redis

E、 查看配置后的服务信息

命令:

①: Redis 客户端使用指定端口连接 Redis 服务器

./redis-cli -p 端口

②:查看服务器信息

info replication

到此所有过程完成,可以开始测试,可以得知只有主服务器(6380)可以写数据,从服务器(6382,6384)不可以写数据。

容灾处理

master 上(冷处理:机器挂掉了,再处理)当 Master 服务出现故障,需手动将 slave 中的一个提升为 master, 剩下的 slave 挂至新的

命令:

①:slaveof no one,将一台 slave 服务器提升为 Master (提升某 slave 为 master)

②:slaveof 127.0.0.1 6381 (将 slave 挂至新的 master 上)

高可用sentinel哨兵

Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它来监控多个 Redis 服务实例的运行情况。Redis Sentinel 是一个运行在特殊模式下的 Redis 服务器。Redis Sentinel 是在多个Sentinel 进程环境下互相协作工作的。

注意:哨兵的个数必须是奇数,因为当主服务器出现故障时候,必须由哨兵投票选取新的主服务器

sentinel哨兵系统的三个主要任务

● 监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作。

● 提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序。

● 自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会开始进行故障迁移操作。将一个从服务器升级新的主服务器。 让其他从服务器挂到新的主服务器。同时向客户端提供新的主服务器地址。

1.sentinel配置

sentinel配置文件

复制三份sentinel.conf文件 (在redis安装目录下)

三个文件分别命名:

● sentinel26380.conf

● sentinel26382.conf

● sentinel26384.conf

● 执行复制命令 cp sentinel.conf xxx.conf

2、三份 sentinel 配置文件修改

● 修改 port 26380、 port 26382、 port 26384

● 修改 sentinel monitor mymaster 127.0.0.1 6380 2

格式:sentinel monitor <name> <masterIP> <masterPort> <Quorum 投票数>

Sentinel监控主(Master)Redis, Sentinel根据Master的配置自动发现Master的Slave,Sentinel默认端口号为26379 。

vim sentinel26380.conf

 

 

sentinel26382.conf 修改port 26382 , master的port 6382

sentinel26384.conf 修改port 26384 , master的port 6382

 

 

4、启动 Sentinel

redis安装时make编译后就产生了redis-sentinel程序文件,可以在一个redis中运行多个sentinel进程。

启动一个运行在Sentinel模式下的Redis服务实例

./redis-sentinel sentinel 配置文件

执行以下三条命令,将创建三个监视主服务器的Sentinel实例:

./redis-sentinel ../sentinel26380.conf

./redis-sentinel ../sentinel26382.conf

./redis-sentinel ../sentinel26384.conf

在 XShell 开启三个窗口分别执行。

5.结果

之后就可以关闭主服务器查看哨兵的处理情况,再开开主服务器查看哨兵的处理情况。

安全设置

设置密码

访问 Redis 默认是没有密码的,这样不安全,任意用户都可以访问。可以启用使用密码才能访问 Redis。 设置 Redis 的访问密码,修改 redis.conf 中这行 requirepass 密码。密码要比较复杂,不容易破解,而且需要定期修改。因为 redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行 150K 次的密码尝试,需要指定非常非常强大的密码来防止暴力破解。

开启访问密码设置

修改 redis.conf , 使用 vim 命令。 找到 requirepass 行去掉注释,requirepass 空格后就是密码。

访问有密码的redis

如果 Redis 已经启动,关闭后,重新启动。

访问有密码的 Redis 两种方式:

①:在连接到客户端后,使用命令 auth 密码 , 命令执行成功后,可以正常使用 Redis

②:在连接客户端时使用 -a 密码。例如 ./redis-cli -h ip -p port -a password

绑定ip

修改 redis.conf 文件,把# bind 127.0.0.1 前面的注释#号去掉,然后把 127.0.0.1 改成允许访问你 redis 服务器的 ip 地址,表示只允许该 ip 进行访问。多个 ip 使用空格分隔。

例如 bind 192.168.1.100 192.168.2.10

修改默认端口

修改 redis 的端口,这一点很重要,使用默认的端口很危险,redis.conf 中修改 port 6379

将其修改为自己指定的端口(可随意),端口 1024 是保留给操作系统使用的。用户可以使用的范围是 1024-65535

使用 -p 参数指定端口,例如:./redis-cli -p 新设置端口

posted @ 2022-01-07 18:03  AMHAO  阅读(39)  评论(0编辑  收藏  举报