一、redis介绍
redis和memcached类似,但支持更多value类型,处理string外,还支持hash、list、sets和sorted sets(有序集合)
redis使用了两种文件格式:全量数据(RDB)和增量请求(aof)。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。增强请求文件是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,类似于mysql binlog。
Redis的存储分为:内存存储、磁盘存储和log文件。
二、Redis安装
1、下载安装:
[root@node1 ~]# curl -O http://download.redis.io/releases/redis-4.0.10.tar.gz [root@node1 ~]# tar xf redis-4.0.10.tar.gz [root@node1 ~]# cd redis-4.0.10 [root@node1 redis-4.0.10]# make && make PREFIX=/usr/local/redis install [root@node1 redis-4.0.10]# cp redis.conf /usr/local/redis/
这个比较特殊,不用./configure
2、配置环境变量
[root@node1 ~]# echo "PATH=/usr/local/redis/bin:$PATH">>/etc/profile [root@node1 ~]# source /etc/profile [root@node1 ~]#
3、配置文件
将redis.conf文件中:daemonize no改为daemonize yes,则在后台启动
在配置文件中修改如下:
daemonize yes
logfile "/var/log/redis.log"
appendonly yes
dir /data/redis_data
创建目录:
[root@node1 ~]# mkdir /data/redis_data -p
4、Redis启动和关闭
启动:
[root@node1 ~]# nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
&:表示后台启动
/usr/local/redis/redis.conf:指定配置文件
查看日志:
[root@node1 ~]# cat /var/log/redis.log 6707:C 28 Jul 10:21:08.147 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 6707:C 28 Jul 10:21:08.148 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=6707, just started 6707:C 28 Jul 10:21:08.148 # Configuration loaded 6708:M 28 Jul 10:21:08.152 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit .-`` .-```. ```/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 6708 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 6708:M 28 Jul 10:21:08.156 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 6708:M 28 Jul 10:21:08.157 # Server initialized 6708:M 28 Jul 10:21:08.157 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 6708:M 28 Jul 10:21:08.157 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 6708:M 28 Jul 10:21:08.157 * Ready to accept connections [root@node1 ~]#
日志中有两个警告,解决方法:
在命令中执行这两条命令:
[root@node1 ~]# sysctl vm.overcommit_memory=1 vm.overcommit_memory = 1 [root@node1 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@node1 ~]#
在/etc/rc.local中添加这两行命令:
[root@node1 ~]# vim /etc/rc.local sysctl vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled
关闭:
[root@node1 ~]# /usr/local/redis/bin/redis-cli -p 6379 shutdown [1]+ Done nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf [root@node1 ~]#
默认端口:6379
三、Redis持久化
Redis的两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。
RDB:在不同的时间点,将redis存储的数据生成快照并保存到磁盘等介质上。默认情况下,RDB是开启的。
AOF:将Redis执行过的所有指令记录下来,下次Redis重新启动时,只要把这些指令从前到后再重复执行一遍,就可以实现数据恢复了。默认情况,AOF是关闭的。
这两种方式可以同时使用。
如果你没有数据持久化的需求,就可以关闭RDB、AOF,这样就跟memcache一样,变成了一个纯内存数据库。
RDB的默认的配置文件:
# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
#
# Note: you can disable saving completely by commenting out all "save" lines.
#
# It is also possible to remove all the previously configured save
# points by adding a save directive with a single empty string argument
# like in the following example:
#
# save ""save 900 1
save 300 10
save 60 10000
把# save ""的#去掉,则关闭持久化。
开启AOF:appendonly yes,默认是appendonly no。
十二、Redis数据类型
1、string类型:为最简单的数据类型。
[root@node1 ~]# redis-cli 127.0.0.1:6379> set mykey haha OK 127.0.0.1:6379> 127.0.0.1:6379> get mykey "haha" 127.0.0.1:6379>
设置多个键值对:
127.0.0.1:6379> mset key1 aa key2 bb key3 cc OK 127.0.0.1:6379> MGET key1 1) "aa" 127.0.0.1:6379> MGET key2 1) "bb" 127.0.0.1:6379> MGET key2 key3 1) "bb" 2) "cc" 127.0.0.1:6379>
2、list类型
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
127.0.0.1:6379> LPUSH list1 "111" (integer) 2 127.0.0.1:6379> LPUSH list1 "222" (integer) 3 127.0.0.1:6379> LPUSH list1 "333" (integer) 4 127.0.0.1:6379> LRANGE list1 0 -1 1) "333" 2) "222" 3) "111" 4) "111" 127.0.0.1:6379> 127.0.0.1:6379> LPOP list1 "333" 127.0.0.1:6379> LRANGE list1 0 -1 1) "222" 2) "111" 3) "111" 127.0.0.1:6379>
3、set类型
set:集合。跟数学中的集合概念相似,有元素的增删、集合的运算(交、并、补)等等
127.0.0.1:6379> SADD set1 111 (integer) 1 127.0.0.1:6379> SADD set1 222 (integer) 1 127.0.0.1:6379> SADD set1 333 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "111" 2) "222" 3) "333" 127.0.0.1:6379> SADD set2 333 (integer) 1 127.0.0.1:6379> SADD set2 444 (integer) 1 127.0.0.1:6379> SADD set2 555 (integer) 1 127.0.0.1:6379>
上面中,创建了两个集合:set1、set2
并集:
127.0.0.1:6379> SUNION set1 set2 1) "111" 2) "222" 3) "333" 4) "444" 5) "555" 127.0.0.1:6379>
交集:
127.0.0.1:6379> SINTER set1 set2 1) "333" 127.0.0.1:6379>
差集:
127.0.0.1:6379> SDIFF set1 set2 1) "111" 2) "222" 127.0.0.1:6379>
元素的删除(SREM ):
127.0.0.1:6379> SREM set1 111 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "222" 2) "333" 127.0.0.1:6379>
有序集合(ZADD ):
127.0.0.1:6379> ZADD score 12 xiaomig (integer) 1 127.0.0.1:6379> ZADD score 89 xiaohong (integer) 1 127.0.0.1:6379> ZADD score 52 zhangsan (integer) 1 127.0.0.1:6379> ZADD score 78 wangwu (integer) 1 127.0.0.1:6379> ZRANGE score 0 -1 1) "xiaomig" 2) "zhangsan" 3) "wangwu" 4) "xiaohong" 127.0.0.1:6379>
倒序:
127.0.0.1:6379> ZREVRANGE score 0 -1 1) "xiaohong" 2) "wangwu" 3) "zhangsan" 4) "xiaomig" 127.0.0.1:6379>
4、hash类型
在memcache中,经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户名、年龄、性别等等。
127.0.0.1:6379> HSET hash01 name "zhangsan" (integer) 1 127.0.0.1:6379> HSET hash01 age 25 (integer) 1 127.0.0.1:6379> HSET hash01 job ceo (integer) 1 127.0.0.1:6379> HGET hash01 name "zhangsan" 127.0.0.1:6379> HGET hash01 age "25" 127.0.0.1:6379> HGET hash01 job "ceo" 127.0.0.1:6379> HGETALL hash01 1) "name" 2) "zhangsan" 3) "age" 4) "25" 5) "job" 6) "ceo" 127.0.0.1:6379>
四、Redis常用操作
1、string操作
set:设置,覆盖赋值,语法:set key value [EX seconds] [PX milliseconds] [NX|XX]
get:获取
setnx:设置,如果key已存在,则不会覆盖
例如:
127.0.0.1:6379> set k1 haha OK 127.0.0.1:6379> get k1 "haha" 127.0.0.1:6379>
如果key已存在,则会被覆盖。
setnx:
127.0.0.1:6379> SETNX k2 hello (integer) 1 127.0.0.1:6379> SETNX k2 haha (integer) 0 127.0.0.1:6379> get k2 "hello" 127.0.0.1:6379>
两次赋值,但第二次的时候返回0,因为key已存在,不能被覆盖。
设置k3的过期时间为10s,值为1,如果已存在则覆盖:
127.0.0.1:6379> SETEX k3 10 1 OK 127.0.0.1:6379>
mset:
127.0.0.1:6379> MSET k2 2 k3 3 k4 4 OK 127.0.0.1:6379> MSET k2 2 k3 3 k4 4 OK 127.0.0.1:6379> MGET k2 k3 1) "2" 2) "3" 127.0.0.1:6379>
2、list操作
lpush lista a //从左侧加入一个元素
lpop lista //从左侧取出一个元素
rpush lista a //从右侧加入一个元素
rpop lista //从右侧取出一个元素
lrange lista 0 -1 //取出从0开始到倒数第一个之间的元素
例如:
127.0.0.1:6379> LPUSH lista 111 (integer) 1 127.0.0.1:6379> LPUSH lista 222 (integer) 2 127.0.0.1:6379> LPUSH lista 333 (integer) 3 127.0.0.1:6379> LPUSH lista 444 (integer) 4 127.0.0.1:6379> LRANGE lista 0 -1 1) "444" 2) "333" 3) "222" 4) "111"
取出元素:
127.0.0.1:6379> LPOP lista "444" 127.0.0.1:6379> LPOP lista "333" 127.0.0.1:6379> LRANGE lista 0 -1 1) "222" 2) "111" 127.0.0.1:6379> RPOP lista "111" 127.0.0.1:6379> LRANGE lista 0 -1 1) "222" 127.0.0.1:6379>
元素取出之后就不会在list中保存了。
元素的修改:
127.0.0.1:6379> LPUSH test 111 (integer) 1 127.0.0.1:6379> LPUSH test 222 (integer) 2 127.0.0.1:6379> LPUSH test 333 (integer) 3 127.0.0.1:6379> LPUSH test 444 (integer) 4 127.0.0.1:6379> LPUSH test 555 (integer) 5 127.0.0.1:6379>
修改第3个元素为aaa,查看第3、4个元素:
127.0.0.1:6379> LSET test 3 aaa OK 127.0.0.1:6379> LINDEX test 3 "aaa" 127.0.0.1:6379> LINDEX test 4 "111" 127.0.0.1:6379>
查看列表中有多少个元素:
127.0.0.1:6379> LLEN test (integer) 5 127.0.0.1:6379>
在某个元素前面(后面)插入一个元素:
127.0.0.1:6379> LINSERT test before 111 888 (integer) 6 127.0.0.1:6379> LRANGE test 0 -1 1) "555" 2) "444" 3) "333" 4) "aaa" 5) "888" 6) "111" 127.0.0.1:6379>
3、set操作
sadd 集合名 元素:向集合添加元素
smembers 集合名:查看集合中的全部元素
srem 集合名 元素:删除元素
spop 集合名:取出一个元素,删除
sdiff 集合1 集合2:以集合1为标准,求差集
sdiffstore 集合1 集合2 集合3:求差集并储存到集合1
sinter 集合1 集合2:求交集
sinterstore 集合1 集合2 集合3:求交集,并存储到集合1
sunion 集合1 集合2:求并集
sunion 集合1 集合2 集合3:求并集并存储到集合1
添加及查询:
[root@node1 ~]# redis-cli 127.0.0.1:6379> sadd set1 11 (integer) 1 127.0.0.1:6379> sadd set1 22 (integer) 1 127.0.0.1:6379> sadd set1 33 44 55 (integer) 3 127.0.0.1:6379> SMEMBERS set1 1) "11" 2) "22" 3) "33" 4) "44" 5) "55" 127.0.0.1:6379>
删除:
127.0.0.1:6379> SREM set1 55 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "11" 2) "22" 3) "33" 4) "44" 127.0.0.1:6379> spop set1 "44" 127.0.0.1:6379> SMEMBERS set1 1) "11" 2) "22" 3) "33" 127.0.0.1:6379>
差集:
127.0.0.1:6379> SADD set2 22 33 44 55 66 77 (integer) 6 127.0.0.1:6379> SDIFF set1 set2 1) "11" 127.0.0.1:6379>
求差集并保存到另一个集合:
127.0.0.1:6379> SDIFFSTORE set3 set1 set2 (integer) 1 127.0.0.1:6379> SMEMBERS set3 1) "11" 127.0.0.1:6379>
交集:
127.0.0.1:6379> SINTER set1 set2 1) "22" 2) "33" 127.0.0.1:6379> SINTERSTORE set4 set1 set2 (integer) 2 127.0.0.1:6379> SMEMBERS set4 1) "22" 2) "33" 127.0.0.1:6379>
并集:
127.0.0.1:6379> SUNION set1 set2 1) "11" 2) "22" 3) "33" 4) "44" 5) "55" 6) "66" 7) "77"
其他操作:
sismembaer 集合 元素:判断一个元素是否属于一个集合,是则返回1。
srandmember 集合:取出一个元素,但不删除
zadd 集合:创建有序集合
zrange 集合 0 -1:显示所有元素,按顺序显示
zrange 集合 0 -1 withscores:带上分值
zrem 集合 元素:删除指定元素
zrank 集合 元素:返回元素的索引值
zrevrank 集合 元素:按score反向排列
zrevrange 集合 0 -1:反向显示,并带分值
zcard 集合:返回集合中的元素的个数
zrangebyscore 集合 1 10:返回1-10的元素个数
zremrangebyrank 集合 0 2:删除索引0-2的元素,按分值正向排序
zremrangebyscore 集合 0 2:删除分值0-2的元素
例如:
判断元素是否属于集合:
127.0.0.1:6379> SISMEMBER set1 11 (integer) 1 127.0.0.1:6379> SISMEMBER set1 0 (integer) 0 127.0.0.1:6379>
取出一个元素,但不删除:
127.0.0.1:6379> SRANDMEMBER set1 "33" 127.0.0.1:6379> SMEMBERS set1 1) "11" 2) "22" 3) "33" 127.0.0.1:6379>
创建有序集合:
127.0.0.1:6379> ZADD zset1 1 aa (integer) 1 127.0.0.1:6379> ZADD zset1 2 hello (integer) 1 127.0.0.1:6379> ZADD zset1 3 22 (integer) 1 127.0.0.1:6379> ZADD zset1 4 55 (integer) 1 127.0.0.1:6379> ZADD zset1 5 world (integer) 1 127.0.0.1:6379> ZADD zset1 6 cmd (integer) 1 127.0.0.1:6379>
显示集合的全部元素:
127.0.0.1:6379> ZRANGE zset1 0 -1 1) "aa" 2) "hello" 3) "22" 4) "55" 5) "world" 6) "cmd" 127.0.0.1:6379>
删除某个元素:
127.0.0.1:6379> ZREM zset1 cmd (integer) 1 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "aa" 2) "hello" 3) "22" 4) "55" 5) "world" 127.0.0.1:6379>
删除指定元素:
127.0.0.1:6379> ZREM zset1 world (integer) 1 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "aa" 2) "hello" 3) "22" 4) "55" 127.0.0.1:6379>
返回元素的索引值:
127.0.0.1:6379> zrank zset1 55 (integer) 3 127.0.0.1:6379>
返回元素个数:
127.0.0.1:6379> ZCARD zset1 (integer) 4 127.0.0.1:6379>
按分值正向排序:
127.0.0.1:6379> ZRANGEBYSCORE zset1 1 3 1) "aa" 2) "hello" 3) "22" 127.0.0.1:6379>
正、反序:
127.0.0.1:6379> ZREVRANGE zset1 0 3 1) "55" 2) "22" 3) "hello" 4) "aa" 127.0.0.1:6379> ZRANGE zset1 0 3 1) "aa" 2) "hello" 3) "22" 4) "55" 127.0.0.1:6379>
zrangebyscore :
127.0.0.1:6379> zrangebyscore zset1 1 5 1) "aa" 2) "hello" 3) "22" 4) "55" 127.0.0.1:6379>
zremrangebyrank :
127.0.0.1:6379> ZREMRANGEBYRANK zset1 0 1 (integer) 2 127.0.0.1:6379> ZREVRANGE zset1 0 -1 1) "55" 2) "22" 127.0.0.1:6379>
4、hash操作
建立hash:如:
127.0.0.1:6379> hset user1 name zhangsan (integer) 1 127.0.0.1:6379> hset user1 age 25 (integer) 1 127.0.0.1:6379> hset user1 job IT (integer) 1
获取hash表的内容:
127.0.0.1:6379> HGETALL user1 1) "name" 2) "zhangsan" 3) "age" 4) "25" 5) "job" 6) "IT" 127.0.0.1:6379>
批量建立hmset:
127.0.0.1:6379> HMSET user2 name lisi age 30 job it OK 127.0.0.1:6379>
获取某个值:
127.0.0.1:6379> HMGET user2 name age job 1) "lisi" 2) "30" 3) "it" 127.0.0.1:6379>
删除:
127.0.0.1:6379> HDEL user2 job (integer) 1 127.0.0.1:6379> HMGET user2 name age job 1) "lisi" 2) "30" 3) (nil) 127.0.0.1:6379>
打印所有的key:
127.0.0.1:6379> HKEYS user1 1) "name" 2) "age" 3) "job" 127.0.0.1:6379>
打印所有的值:
127.0.0.1:6379> HVALS user1 1) "zhangsan" 2) "25" 3) "IT" 127.0.0.1:6379>
查看有几个filed:
127.0.0.1:6379> HLEN user1 (integer) 3 127.0.0.1:6379> HLEN user2 (integer) 2 127.0.0.1:6379>
五、Redis操作键值
键值的操作:
keys * :取出所有键
exists 键名:存在返回1
del 键:删除键
expire 键 100:设置键100秒后过期
ttl 键:查看键的过期时间,单位是秒,当键不存在返回-2,键存在但没设置过期时间返回-1
select 0 :代表选择当前数据库,默认进入0数据库
move age 1 :把age移动到1数据库
persist 键:取消键的过期时间
randomkey:返回一个键
rename oldname newname:重命名
type 键:返回键的类型
查看键值:
127.0.0.1:6379> KEYS * 1) "mykey" 2) "hash01" 3) "list2" 4) "user1" 5) "score" 6) "set3" 7) "key3" 8) "test" 9) "zset1" 10) "list1" 11) "k1" 12) "key1" 13) "user2" 14) "set1" 15) "k4" 16) "set4" 17) "lista" 18) "set2" 19) "k2" 20) "list3" 21) "k3" 22) "key2" 127.0.0.1:6379>
模糊匹配键:
127.0.0.1:6379> KEYS key* 1) "key3" 2) "key1" 3) "key2" 127.0.0.1:6379>
判断键是否存在:
127.0.0.1:6379> EXISTS key1 (integer) 1 127.0.0.1:6379> EXISTS key (integer) 0 127.0.0.1:6379>
删除键:
127.0.0.1:6379> DEL key1 (integer) 1 127.0.0.1:6379> get key1 (nil) 127.0.0.1:6379>
设置过期时间:
127.0.0.1:6379> EXPIRE key2 100 (integer) 1 127.0.0.1:6379>
查看键的过期时间:
127.0.0.1:6379> ttl key2 (integer) 68 127.0.0.1:6379>
选择当前数据库:
127.0.0.1:6379> select 0 OK 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> KEYS * (empty list or set) 127.0.0.1:6379[1]>
将某个键移动到其他数据库:
127.0.0.1:6379> KEYS * 1) "mykey" 2) "hash01" 3) "list2" 4) "user1" 5) "score" 6) "set3" 7) "key3" 8) "test" 9) "zset1" 10) "list1" 11) "k1" 12) "user2" 13) "set1" 14) "k4" 15) "set4" 16) "lista" 17) "set2" 18) "k2" 19) "list3" 20) "k3" 127.0.0.1:6379> move k1 1 (integer) 1 127.0.0.1:6379>
随机返回一个键:
127.0.0.1:6379> RANDOMKEY "list3" 127.0.0.1:6379> RANDOMKEY "set2" 127.0.0.1:6379> RANDOMKEY "k4" 127.0.0.1:6379> RANDOMKEY "test" 127.0.0.1:6379> RANDOMKEY "list1" 127.0.0.1:6379>
键重命名:
127.0.0.1:6379> RENAME k4 k11 OK 127.0.0.1:6379>
键的类型:
127.0.0.1:6379> TYPE score zset 127.0.0.1:6379> TYPE k3 string 127.0.0.1:6379>
其他操作:
dbsize:返回当前数据的key数量
127.0.0.1:6379> dbsize (integer) 19 127.0.0.1:6379>
info:数据库状态
127.0.0.1:6379> info # Server redis_version:4.0.10 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:76c92faed2ce6dab redis_mode:standalone os:Linux 3.10.0-862.el7.x86_64 x86_64 ...
flushdb:清空当前数据库中的所有键
127.0.0.1:6379> FLUSHDB OK 127.0.0.1:6379> KEYS * (empty list or set) 127.0.0.1:6379>
flushall:清空所有数据库中的所有的key
127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379>
bgsave:保存数据到rdb文件中,在后台运行
127.0.0.1:6379> bgsave Background saving started 127.0.0.1:6379>
save:保存数据到rdb文件中,在前台运行
127.0.0.1:6379> save OK 127.0.0.1:6379>
config get * :获取所有配置参数
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "cluster-announce-ip" 8) "" 9) "unixsocket" 10) "" 11) "logfile" 12) "/var/log/redis.log" 13) "pidfile" 14) "/var/run/redis_6379.pid" ...
config get dir:获取dir的配置参数
127.0.0.1:6379> CONFIG GET dir 1) "dir" 2) "/data/redis_data" 127.0.0.1:6379> 127.0.0.1:6379> CONFIG GET dbfile* 1) "dbfilename" 2) "dump.rdb" 127.0.0.1:6379>
config set :设置参数
127.0.0.1:6379> CONFIG SET timeout 1000 OK 127.0.0.1:6379> CONFIG GET tim* 1) "timeout" 2) "1000" 127.0.0.1:6379>
数据恢复:首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录,重启redis即可。
六、Redis安全设置
设置监听ip:
bind 127.0.0.1 192.168.10.205 :指定监听ip,多个ip用空格分割
设置监听端口:
port 12232:默认端口6379
设置密码:
[root@node1 ~]# vim /usr/local/redis/redis.conf ... requirepass 123456 ...
登录后执行命令:
[root@node1 ~]# redis-cli 127.0.0.1:6379> KEYS * (error) NOAUTH Authentication required. 127.0.0.1:6379>
得使用密码登录:
[root@node1 ~]# redis-cli -a '123456' Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
在配置文件将config命令改名、禁用config命令
改名:rename-command CONFIG haha
禁用:rename-command CONFIG ""
七、Redis慢查询日志
慢查询日志,两个参数:一个是执行时长,单位是微妙,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。
slowlog-log-slower-than 1000:表示慢于1000ms则记录日志
slowlog-max-len 128:定义长度,最多存128条
slowlog get:列出 全部慢查询日志
slowlog len:查看慢查询日志条数
配置文件:
[root@node1 ~]# grep slowlog-* /usr/local/redis/redis.conf slowlog-log-slower-than 10000 slowlog-max-len 128 [root@node1 ~]#
默认已经配置了慢查询。
查看慢查询:
[root@node1 ~]# redis-cli 127.0.0.1:6379> SLOWLOG get (empty list or set) 127.0.0.1:6379> SLOWLOG len (integer) 0 127.0.0.1:6379>
没有慢查询日志
八、php安装Redis扩展模块
1、下载编译安装php的redis模块
下载地址:http://pecl.php.net/package/redis
[root@node1 redis-4.1.0]# /usr/local/php7/bin/phpize Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 [root@node1 redis-4.1.0]# ./configure --with-php-config=/usr/local/php7/bin/php-config && make && make install
2、配置php的php.ini配置文件
php.ini配置文件中添加extension=redis.so
[root@node1 ~]# vim /etc/php7/php.ini ... extension=redis.so ...
3、重启php
[root@node1 ~]# systemctl restart php-fpm [root@node1 ~]#
查看一下:
[root@node1 ~]# /usr/local/php7/bin/php -m | grep redis redis [root@node1 ~]#
OK,安装完成。
九、Redis存储session
有三种配置方法:
1、在php.ini中添加:
session.save_handler = "redis"
session.save_path = "tcp://127.0.0.1:6379"
2、lamp中在Apache虚拟主机配置文件中添加:
php_value session.save_handler = "redis"
php_value session.save_path = "tcp://127.0.0.1:6379"
3、在php-fpm配置文件对应的pool中添加:
php_value[session.save_handler] = "redis"
php_value[session.save_path] = "tcp://127.0.0.1:6379"
[root@node1 ~]# vim /usr/local/php7/etc/php-fpm.d/www.conf ... php_value[session.save_handler] = memcache php_value[session.save_path] = "tcp://192.168.10.205:11211" php_value[session.save_handler] = redis php_value[session.save_path] = "tcp://127.0.0.1:6379" ...
重启php-fpm
[root@node1 ~]# systemctl restart php-fpm
十、Redis主从
主:192.168.10.205, 主机名:node1
从:192.168.10.206,主机名:node2
在前面中,主192.168.10.205已经安装好了redis
清空防火墙规则。
1、node2安装redis
从按照前面的方法安装Redis。
[root@node2 ~]# curl -O http://download.redis.io/releases/redis-4.0.10.tar.gz [root@node2 ~]# tar xf redis-4.0.10.tar.gz [root@node2 ~]# cd redis-4.0.10 [root@node2 redis-4.0.10]# make && make PREFIX=/usr/local/redis install [root@node2 redis-4.0.10]# cp redis.conf /usr/local/redis/
2、配置文件中修改添加:
daemonize yes
logfile "/var/log/redis.log"
appendonly yes
dir /data/redis_data
slaveof 192.168.10.205 6379 #指定主
3、创建redis数据库目录:
[root@node2 ~]# mkdir /data/redis_data -pv mkdir: created directory ‘/data’ mkdir: created directory ‘/data/redis_data’ [root@node2 ~]# chmod -R 777 /data/ [root@node2 ~]#
4、设置环境变量
[root@node2 ~]# echo "PATH=/usr/local/redis/bin:$PATH">>/etc/profile [root@node2 ~]# source /etc/profile
5、启动Redis
[root@node2 ~]# redis-server /usr/local/redis/redis.conf [root@node2 ~]#
https://github.com/nrk/predis
十一、Redis集群
多个redis节点网络互连,数据共享
所有节点一主一从(可以是多个从),其中从不提供服务,仅作为备用。
不支持同时处理多个键(如mset、mget),因为Redis需要把键均匀分布在各个节点上,并发量很高的情况下,同时创建键值会降低性能,导致不可预测的行为。
支持在线增加、删除节点
客户端可以连接任一个主节点进行读写
十二、Redis集群搭建
node1:192.168.10.205
node2:192.168.10.206
node1开启7000、70002、7004端口,每个端口一个配置文件,全为主
node2开启7001、70003、7005端口,每个端口一个配置文件,全为从
1、node1配置文件:
redis_7000.conf :
[root@node1 ~]# vim /usr/local/redis/redis_7000.conf port 7000 bind 192.168.10.205 daemonize yes pidfile /var/run/redis_7000.pid dir /data/redis_data/7000 cluster-enabled yes cluster-config-file nodes_7000.conf cluster-node-timeout 10100 appendonly yes
redis_7002.conf :
[root@node1 ~]# vim /usr/local/redis/redis_7002.conf port 7002 bind 192.168.10.205 daemonize yes pidfile /var/run/redis_7002.pid dir /data/redis_data/7002 cluster-enabled yes cluster-config-file nodes_7002.conf cluster-node-timeout 10100 appendonly yes
redis_7004.conf :
[root@node1 ~]# vim /usr/local/redis/redis_7004.conf port 7004 bind 192.168.10.205 daemonize yes pidfile /var/run/redis_7004.pid dir /data/redis_data/7004 cluster-enabled yes cluster-config-file nodes_7004.conf cluster-node-timeout 10100 appendonly yes
创建相关目录:
[root@node1 ~]# mkdir /data/redis_data/{7000,7002,7004} [root@node1 ~]#
2、node2配置文件:
redis_7001.conf :
[root@node2 ~]# vim /usr/local/redis/redis_7001.conf port 7001 bind 192.168.10.206 daemonize yes pidfile /var/run/redis_7001.pid dir /data/redis_data/7001 cluster-enabled yes cluster-config-file nodes_7001.conf cluster-node-timeout 10100 appendonly yes
redis_7003.conf :
[root@node2 ~]# vim /usr/local/redis/redis_7003.conf port 7003 bind 192.168.10.206 daemonize yes pidfile /var/run/redis_7003.pid dir /data/redis_data/7003 cluster-enabled yes cluster-config-file nodes_7003.conf cluster-node-timeout 10100 appendonly yes
redis_7005.conf :
[root@node2 ~]# vim /usr/local/redis/redis_7005.conf port 7005 bind 192.168.10.206 daemonize yes pidfile /var/run/redis_7005.pid dir /data/redis_data/7005 cluster-enabled yes cluster-config-file nodes_7005.conf cluster-node-timeout 10100 appendonly yes
创建相关目录:
[root@node2 ~]# mkdir /data/redis_data/{7001,7003,7005} [root@node2 ~]#
3、启动Redis
node1:
[root@node1 ~]# redis-server /usr/local/redis/redis_7000.conf 7235:C 29 Jul 11:30:07.801 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 7235:C 29 Jul 11:30:07.802 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=7235, just started 7235:C 29 Jul 11:30:07.802 # Configuration loaded [root@node1 ~]# redis-server /usr/local/redis/redis_7002.conf 7273:C 29 Jul 11:30:20.623 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 7273:C 29 Jul 11:30:20.623 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=7273, just started 7273:C 29 Jul 11:30:20.623 # Configuration loaded [root@node1 ~]# redis-server /usr/local/redis/redis_7004.conf 7311:C 29 Jul 11:30:24.243 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 7311:C 29 Jul 11:30:24.243 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=7311, just started 7311:C 29 Jul 11:30:24.243 # Configuration loaded [root@node1 ~]# ps aux | grep redis root 2729 0.1 0.3 145304 7776 ? Ssl 10:01 0:08 redis-server 127.0.0.1:6379 root 7236 0.1 0.3 145308 7568 ? Ssl 11:30 0:00 redis-server 192.168.10.205:7000 [cluster] root 7274 0.1 0.3 145308 7564 ? Ssl 11:30 0:00 redis-server 192.168.10.205:7002 [cluster] root 7312 0.1 0.3 145308 7564 ? Ssl 11:30 0:00 redis-server 192.168.10.205:7004 [cluster] root 7384 0.0 0.0 112704 964 pts/1 S+ 11:31 0:00 grep --color=auto redis [root@node1 ~]#
node2:
[root@node2 ~]# redis-server /usr/local/redis/redis_7001.conf 5067:C 29 Jul 11:31:13.280 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5067:C 29 Jul 11:31:13.280 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5067, just started 5067:C 29 Jul 11:31:13.280 # Configuration loaded [root@node2 ~]# redis-server /usr/local/redis/redis_7003.conf 5072:C 29 Jul 11:31:16.302 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5072:C 29 Jul 11:31:16.302 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5072, just started 5072:C 29 Jul 11:31:16.302 # Configuration loaded [root@node2 ~]# redis-server /usr/local/redis/redis_7005.conf 5077:C 29 Jul 11:31:19.185 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5077:C 29 Jul 11:31:19.185 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5077, just started 5077:C 29 Jul 11:31:19.185 # Configuration loaded [root@node2 ~]# [root@node2 ~]# ps aux | grep redis root 5027 0.2 0.4 145304 7648 ? Ssl 10:57 0:05 redis-server 127.0.0.1:6379 root 5068 0.1 0.4 145308 7568 ? Ssl 11:31 0:00 redis-server 192.168.10.206:7001 [cluster] root 5073 0.1 0.4 145308 7564 ? Ssl 11:31 0:00 redis-server 192.168.10.206:7003 [cluster] root 5078 0.1 0.4 145308 7568 ? Ssl 11:31 0:00 redis-server 192.168.10.206:7005 [cluster] root 5083 0.0 0.0 112704 968 pts/0 S+ 11:32 0:00 grep --color=auto redis [root@node2 ~]#
OK,启动成功。
4、node1安装ruby
源码包:http://cache.ruby-lang.org/pub/ruby/ruby-2.5.1.tar.gz
[root@node1 ~]# curl -O http://cache.ruby-lang.org/pub/ruby/ruby-2.5.1.tar.gz [root@node1 ~]# tar xf ruby-2.5.1.tar.gz [root@node1 ~]# cd ruby-2.5.1 [root@node1 ruby-2.5.1]# ./configure --prefix=/usr/local/ruby && make && make install
安装redis相关:
[root@node1 ~]# /usr/local/ruby/bin/gem install redis Successfully installed redis-3.3.0 Parsing documentation for redis-3.3.0 Installing ri documentation for redis-3.3.0 Done installing documentation for redis after 0 seconds 1 gem installed [root@node1 ~]#
安装redi.gem
[root@node1 ~]# curl -O http://rubygems.org/downloads/redis-3.3.0.gem [root@node1 ~]# /usr/local/ruby/bin/gem install -l redis-3.3.0.gem Successfully installed redis-3.3.0 Parsing documentation for redis-3.3.0 Done installing documentation for redis after 1 seconds 1 gem installed [root@node1 ~]#
配置ruby环境变量:
[root@node1 ~]# echo "PATH=/usr/local/ruby/bin:$PATH">> /etc/profile [root@node1 ~]# source /etc/profile [root@node1 ~]#
5、复制redis源码包解压目录中的redis-trib.rb文件到/usr/bin/目录
[root@node1 ~]# cp redis-4.0.10/src/redis-trib.rb /usr/bin/ [root@node1 ~]#
6、创建集群
[root@node1 ~]# redis-trib.rb create --replicas 1 192.168.10.205:7000 192.168.10.205:7002 192.168.10.205:7004 192.168.10.206:7001 192.168.10.206:7003 192.168.10.206:7005 >>> Creating cluster /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.10.205:7000 192.168.10.206:7001 192.168.10.205:7002 Adding replica 192.168.10.206:7005 to 192.168.10.205:7000 Adding replica 192.168.10.205:7004 to 192.168.10.206:7001 Adding replica 192.168.10.206:7003 to 192.168.10.205:7002 M: 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000 slots:0-5460 (5461 slots) master M: 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002 slots:10923-16383 (5461 slots) master S: a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004 replicates f053e9615037a62036977219249accb35c0a1406 M: f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001 slots:5461-10922 (5462 slots) master S: 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003 replicates 6dae83f108b33f8f67028f027572238fc349631c S: 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005 replicates 917c4f868f02120a424e2f6495a7b41f3f5b644d Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join... >>> Performing Cluster Check (using node 192.168.10.205:7000) M: 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005 slots: (0 slots) slave replicates 917c4f868f02120a424e2f6495a7b41f3f5b644d S: a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004 slots: (0 slots) slave replicates f053e9615037a62036977219249accb35c0a1406 M: 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003 slots: (0 slots) slave replicates 6dae83f108b33f8f67028f027572238fc349631c M: f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@node1 ~]#
命令:
redis-trib.rb create –replicas 1 192.168.10.205:7000 192.168.10.205:7002 192.168.10.205:7004 192.168.10.206:7001 192.168.10.206:7003 192.168.10.206:7005
说明:–replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
十三、集群的操作
1、登录: redis-cli -c -h 192.168.10.205 -p 7000
-c:以集群的方式登录
[root@node1 ~]# redis-cli -c -h 192.168.10.205 -p 7000 192.168.10.205:7000>
2、创建key
在任意一个节点创建key
[root@node1 ~]# redis-cli -c -h 192.168.10.205 -p 7000 192.168.10.205:7000> SET key1 haha -> Redirected to slot [9189] located at 192.168.10.206:7001 OK 192.168.10.206:7001> SET key2 abc -> Redirected to slot [4998] located at 192.168.10.205:7000 OK 192.168.10.205:7000> SET key3 123 OK 192.168.10.205:7000> SET key4 456 -> Redirected to slot [13120] located at 192.168.10.205:7002 OK 192.168.10.205:7002>
3、获取key:
192.168.10.205:7002> get key1 -> Redirected to slot [9189] located at 192.168.10.206:7001 "haha" 192.168.10.206:7001> get key2 -> Redirected to slot [4998] located at 192.168.10.205:7000 "abc" 192.168.10.205:7000> get key3 "123" 192.168.10.205:7000> get key4 -> Redirected to slot [13120] located at 192.168.10.205:7002 "456" 192.168.10.205:7002>
4、检测集群状态:
redis-trib.rb check ip:端口
[root@node1 ~]# redis-trib.rb check 192.168.10.205:7004 /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated >>> Performing Cluster Check (using node 192.168.10.205:7004) S: a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004 slots: (0 slots) slave replicates f053e9615037a62036977219249accb35c0a1406 S: 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003 slots: (0 slots) slave replicates 6dae83f108b33f8f67028f027572238fc349631c M: 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005 slots: (0 slots) slave replicates 917c4f868f02120a424e2f6495a7b41f3f5b644d M: f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@node1 ~]#
5、列出节点:cluster nodes
[root@node2 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.10.206 -p 7005 192.168.10.206:7005> CLUSTER nodes 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003@17003 slave 6dae83f108b33f8f67028f027572238fc349631c 0 1532843167906 2 connected a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004@17004 slave f053e9615037a62036977219249accb35c0a1406 0 1532843165888 4 connected f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001@17001 master - 0 1532843167000 4 connected 5461-10922 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005@17005 myself,slave 917c4f868f02120a424e2f6495a7b41f3f5b644d 0 1532843165000 6 connected 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002@17002 master - 0 1532843165000 2 connected 10923-16383 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000@17000 master - 0 1532843166900 1 connected 0-5460 192.168.10.206:7005>
6、查看集群信息:cluster info
[root@node1 ~]# redis-cli -c -h 192.168.10.205 -p 7000 192.168.10.205:7000> CLUSTER info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1301 cluster_stats_messages_pong_sent:1349 cluster_stats_messages_sent:2650 cluster_stats_messages_ping_received:1344 cluster_stats_messages_pong_received:1301 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:2650 192.168.10.205:7000>
7、添加节点:cluster meet ip port
添加前,创建一个节点:
[root@node2 ~]# cd /usr/local/redis/ [root@node2 redis]# ls bin redis_7001.conf redis_7003.conf redis_7005.conf redis.conf [root@node2 redis]# cp redis_7001.conf redis_7007.conf [root@node2 redis]# sed -i 's/7001/7007/g' redis_7007.conf [root@node2 redis]# mkdir /data/redis_data/7007 [root@node2 redis]# [root@node2 redis]# redis-server redis_7007.conf 5162:C 29 Jul 13:53:32.579 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5162:C 29 Jul 13:53:32.579 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5162, just started 5162:C 29 Jul 13:53:32.579 # Configuration loaded [root@node2 redis]#
添加节点:
192.168.10.205:7000> CLUSTER MEET 192.168.10.206 7007 OK 192.168.10.205:7000>
添加成功后,节点为主。
8、将当期节点设为指定节点的从:cluster replicate node_id
将7007节点设为7001的从:
[root@node1 ~]# [root@node1 ~]# redis-cli -c -h 192.168.10.206 -p 7007 192.168.10.206:7007> CLUSTER NODES 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000@17000 master - 0 1532843837621 1 connected 0-5460 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002@17002 master - 0 1532843836612 2 connected 10923-16383 a0e3f26650074eff33351725bb1feb64f16f5ca8 192.168.10.206:7007@17007 myself,master - 0 1532843837000 0 connected 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005@17005 slave 917c4f868f02120a424e2f6495a7b41f3f5b644d 0 1532843839638 1 connected f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001@17001 master - 0 1532843837000 4 connected 5461-10922 a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004@17004 slave f053e9615037a62036977219249accb35c0a1406 0 1532843838630 4 connected 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003@17003 slave 6dae83f108b33f8f67028f027572238fc349631c 0 1532843839133 2 connected 192.168.10.206:7007> CLUSTER REPLICATE f053e9615037a62036977219249accb35c0a1406 OK 192.168.10.206:7007>
9、移除节点:cluster forget node_id
比如移除7007,先查询7007的id
[root@node1 ~]# redis-cli -c -h 192.168.10.205 -p 7000 192.168.10.205:7000> CLUSTER NODES a0e3f26650074eff33351725bb1feb64f16f5ca8 192.168.10.206:7007@17007 slave f053e9615037a62036977219249accb35c0a1406 0 1532843973000 4 connected 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005@17005 slave 917c4f868f02120a424e2f6495a7b41f3f5b644d 0 1532843972000 6 connected 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000@17000 myself,master - 0 1532843971000 1 connected 0-5460 a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004@17004 slave f053e9615037a62036977219249accb35c0a1406 0 1532843972000 4 connected 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002@17002 master - 0 1532843972000 2 connected 10923-16383 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003@17003 slave 6dae83f108b33f8f67028f027572238fc349631c 0 1532843972535 5 connected f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001@17001 master - 0 1532843973542 4 connected 5461-10922 192.168.10.205:7000>
7007节点的id:a0e3f26650074eff33351725bb1feb64f16f5ca8
192.168.10.205:7000> CLUSTER FORGET a0e3f26650074eff33351725bb1feb64f16f5ca8 OK 192.168.10.205:7000> CLUSTER NODES 63fe2cf3a4e718917992a910336b19dc007b516d 192.168.10.206:7005@17005 slave 917c4f868f02120a424e2f6495a7b41f3f5b644d 0 1532844029093 6 connected 917c4f868f02120a424e2f6495a7b41f3f5b644d 192.168.10.205:7000@17000 myself,master - 0 1532844026000 1 connected 0-5460 a7e42944665c2ae75ee59bb2360d67ec5f368390 192.168.10.205:7004@17004 slave f053e9615037a62036977219249accb35c0a1406 0 1532844030000 4 connected 6dae83f108b33f8f67028f027572238fc349631c 192.168.10.205:7002@17002 master - 0 1532844027000 2 connected 10923-16383 4fa153b8cc8e8718f63ae7af71c6c843e493c81f 192.168.10.206:7003@17003 slave 6dae83f108b33f8f67028f027572238fc349631c 0 1532844028000 5 connected f053e9615037a62036977219249accb35c0a1406 192.168.10.206:7001@17001 master - 0 1532844030098 4 connected 5461-10922 192.168.10.205:7000>
如果移除的是master,则需改为slave再移除,但不能登录自己的节点去移除自己。
10、保存配置文件:cluster saveconfig
192.168.10.205:7000> CLUSTER SAVECONFIG OK 192.168.10.205:7000>