一、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>


发表评论

电子邮件地址不会被公开。 必填项已用*标注