第三十五课预习任务

1 redis介绍

2 redis安装

3. redis持久化

4.redis数据类型

5.redis常用操作

6.redis操作键值

7.redis安全设置

8.redis慢查询日志

9.php安装redis扩展

10.redis存储session

11.redis主从配置

12. redis集群介绍

13.redis集群搭建配置

 14. redis集群操作


1 redis介绍

Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。

Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。

为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。同时,Redis支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。

2 redis安装

[root@knightlai02 ~]# cd /usr/local/src
[root@knightlai02 src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz
--2018-11-01 06:45:37--  http://download.redis.io/releases/redis-4.0.1.tar.gz
Resolving download.redis.io (download.redis.io)... failed: Name or service not known.
wget: unable to resolve host address ‘download.redis.io’
[root@knightlai02 src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz
--2018-11-01 06:46:00--  http://download.redis.io/releases/redis-4.0.1.tar.gz
Resolving download.redis.io (download.redis.io)... 109.74.203.151
Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1711660 (1.6M) [application/x-gzip]
Saving to: ‘redis-4.0.1.tar.gz’

100%[==============================================================================>] 1,711,660    216KB/s   in 8.4s   

2018-11-01 06:46:09 (199 KB/s) - ‘redis-4.0.1.tar.gz’ saved [1711660/1711660]

解压

[root@knightlai02 src]# tar xzvf redis-4.0.1.tar.gz 
redis-4.0.1/
redis-4.0.1/.gitignore
redis-4.0.1/00-RELEASENOTES
redis-4.0.1/BUGS
redis-4.0.1/CONTRIBUTING
redis-4.0.1/COPYING
redis-4.0.1/INSTALL
redis-4.0.1/MANIFESTO
....................................................

//编译安装
[root@knightlai02 redis-4.0.1]# make && make install
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-4.0.1/src'
    CC Makefile.dep
make[1]: Leaving directory `/usr/local/src/redis-4.0.1/src'
make[1]: Entering directory `/usr/local/src/redis-4.0.1/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark
(cd ../deps && make distclean)
make[2]: Entering directory `/usr/local/src/redis-4.0.1/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true

编辑配置文件修改以下文件改为以下这个


[root@knightlai02 redis-4.0.1]# cp redis.conf /etc/redis.conf
[root@knightlai02 redis-4.0.1]# vim /etc/redis.conf
daemonize yes
logfile "/var/log/redis.log" 
dir /data/redis_data/
appendonly yes


[root@knightlai02 redis-4.0.1]# mkdir /data/redis_data

设置内核文件:

[root@knightlai02 redis-4.0.1]# sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@knightlai02 redis-4.0.1]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

//启动redis并查看是否成功
[root@knightlai02 redis-4.0.1]# redis-server /etc/redis.conf
[root@knightlai02 redis-4.0.1]# ps aux |grep redis
root       5426  0.3  0.2 145296  2188 ?        Ssl  06:57   0:00 redis-server 127.0.0.1:6379
root       5439  1.0  0.0 112704   956 pts/0    R+   06:57   0:00 grep --color=auto redis

3. redis持久化

持久化:

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,这是相对memcache来说的一个大的优势。redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。 
Snapshotting        
快照是默认的持久化方式。这种方式将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以配置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置
save 900 1  #900秒内如果超过1个key被修改,则发起快照保存

 save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化  

save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化  

save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久  

save “”  #这样可以禁用rdb持久化

Append-only file     

aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。

有三种方式如下(默认是:每秒fsync一次)

appendonly yes                //启用aof持久化方式

# appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec      //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

# appendfsync no          //完全依赖os,性能最好,持久化没保证

4.redis数据类型

Keys 
非二进制安全的字符类型( not binary-safe strings )
Values
Strings 
Lists 
Sets 
Sorted sets 
Hash

Key:

 redis本质上一个key-value 数据库,所以我们首先来看看他的key.首先key也是字符串类型,由于key不是binary safe的字符串,所以像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。

我们在使用的时候可以自己定义一个Key的格式。例如 object-type:id:field 
Key不要太长。占内存,查询慢。

Key不要太短。u:1000:pwd 不如 user:1000:password 可读性好

4.1.1 String类型:

 string是redis最基本的类型,而且string类型是二进制安全的。

redis的string可以包含任何数据。包括jpg图片或者序列化的对象。
最大上限是1G字节。 
如果只用string类型,redis就可以被看作加上持久化特性的memcached

4.1.2 List类型:

redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。

list的pop操作还有阻塞版本的。当我们[lr]pop一个list对象是,如果list是空,或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟

4.1.3 Set类型:

redis的set是string类型的无序集合。
set元素最大可以包含(2的32次方-1)个元素。
set的是通过hash table实现的,hash table会随着添加或者删除自动的调整大小
关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐和blog的tag功能。

4.1.4 Sorted Set类型:

和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,另一个score到元素的映射被添加到skip list 并按照score排序,所以就可以有序的获取集合中的元素。

4.1.5 Hash类型:

redis hash是一个string类型的field和value的映射表。
hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

5.redis常用操作

.5.1 String相关命令:

[root@knightlai02 redis-4.0.1]# redis-cli
//set key value 设置key对应的值为string类型的value,返回1表示成功,0失败
127.0.0.1:6379> set key1 123
OK
127.0.0.1:6379> get key1
"123"

//setnx key value 同上,如果key已经存在,返回0 。nx 是not exist的意思
127.0.0.1:6379> setnx key2 "kk"
(integer) 1
127.0.0.1:6379> get key2
"kk"

//getset key value 设置key的值,并返回key的旧值。如果key不存在返回nil
127.0.0.1:6379> getset key1 345
"123"
127.0.0.1:6379> get key1
"345"
127.0.0.1:6379> getset key4 555
(nil)

//mset key1 value1 ... keyN valueN 一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置
mget key1 key2 ... keyN 一次获取多个key的值,如果对应key不存在,则对应返回nil。
127.0.0.1:6379> mset key3 wrw key4 xxx key5 zzz
OK
127.0.0.1:6379> mget key3 key4 key5
1) "wrw"
2) "xxx"
3) "zzz"


//msetnx key1 value1 ... keyN valueN 同上,但是不会覆盖已经存在的key
127.0.0.1:6379> msetnx key1 222 key2 666
(integer) 0
127.0.0.1:6379> mget key1 key2
1) "345"
2) "kk"



incr key 对key的值做加加操作,并返回新的值。注意incr一个不是int的value会返回错误,incr一个不存在的key,则设置key为1
decr key 同上,但是做的是减减操作,decr一个不存在key,则设置key为-1
incrby key integer 同incr,加指定值 ,key不存在时候会设置key,并认为原来的value是 0
decrby key integer 同decr,减指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样效果,反之一样。

append key value  给指定key的字符串值追加value,返回新字符串值的长度。

substr key start end 返回截取过的key的字符串值,注意并不修改key的值。


5.2 List的相关命令:

lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型




rpush key string 同上,在尾部添加
llen key 返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
lrange key start end 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key不存在返回空列表
ltrim key start end  截取list,保留指定区间内元素,成功返回1,key不存在返回错误
lset key index value 设置list中指定下标的元素值,成功返回1,key或者下标不存在返回错误
lrem key count value 从key对应list中删除count个和value相同的元素。count为0时候删除全部
lpop key 从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误 

rpop 同上,但是从尾部删除
blpop key1...keyN timeout 从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。 当阻塞时,如果有client对key1...keyN中的任意key进行push操作,则第一在这个key上被阻塞的client会立即返回。如果超时发生,则返回nil。
brpop 同blpop,一个是从头部删除一个是从尾部删除
rpoplpush srckey destkey 从srckey对应list的尾部移除元素并添加到destkey对应list的头部,最后返回被移除的元素值,整个操作是原子的.如果srckey是空 或者不存在返回nil 

5.3 Set的相关命令:

sadd key member 添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误
srem key member 从key对应set中移除给定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误
spop key 删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回nil
srandmember key 同spop,随机取set中的一个元素,但是不删除元素
smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set类型返回错误
scard key 返回set的元素个数,如果set是空或者key不存在返回0
sismember key member 判断member是否在set中,存在返回1,0表示不存在或者key不存在
sinter key1 key2...keyN 返回所有给定key的交集
sinterstore dstkey key1...keyN 同sinter,但是会同时将交集存到dstkey下

sunion key1 key2...keyN 返回所有给定key的并集
sunionstore dstkey key1...keyN 同sunion,并同时保存并集到dstkey下
sdiff key1 key2...keyN 返回所有给定key的差集
sdiffstore dstkey key1...keyN 同sdiff,并同时保存差集到dstkey下
smembers key 返回key对应set的所有元素,结果是无序的

5.4 Sorted Set的相关命令:

zadd key score member 添加元素到集合,元素在集合中存在则更新对应score

zrem key member 删除指定元素,1表示成功,如果元素不存在返回0
zincrby key incr member 增加对应member的score值,然后移动元素并保持skip list有序。返回更新后的score值
zrank key member 返回指定元素在集合中的排名(下标,非score),集合中元素是按score从小到大排序的
zrevrank key member 同上,但是集合中元素是按score从大到小排序
zrange key start end 类似lrange操作从集合中取指定区间的元素。返回的是有序结果
zrevrange key start end 同上,返回结果是按score逆序的
zrangebyscore key min max 返回集合中score在给定区间的元素
zcount key min max 返回集合中score在给定区间的数量
zcard key 返回集合中元素个数
zscore key element  返回给定元素对应的score
zremrangebyrank key min max 删除集合中排名在给定区间的元素
zremrangebyscore key min max 删除集合中score在给定区间的元素

5.5 Hash的相关命令:

hset key field value 设置hash field为指定值,如果key不存在,则先创建

hget key field  获取指定的hash field
hmget key filed1....fieldN 获取全部指定的hash filed
hmset key filed1 value1 ... filedN valueN 同时设置hash的多个field
hincrby key field integer

6.redis操作键值

 keys *    //取出所有key
 keys my* //模糊匹配
 exists name  //有name键 返回1 ,否则返回0;
 del  key1 // 删除一个key    //成功返回1 ,否则返回0;
 EXPIRE key1 100  //设置key1 100s后过期
 ttl key // 查看键 还有多长时间过期,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间。
 select  0  //代表选择当前数据库,默认进入0 数据库
 move age 1  // 把age 移动到1 数据库
 persist key1   //取消key1的过期时间
 randomkey //随机返回一个key
 rename oldname newname //重命名key
 type key1 //返回键的类型
127.0.0.1:6379> keys *
1) "key2"
2) "key5"
3) "key4"
4) "key3"
5) "key1"

7.redis安全设置

 设置监听ip
 bind 127.0.0.1  2.2.2.2//可以是多个ip,用空格分隔
 设置监听端口  
 port 16000
 设置密码 
 requirepass aming>com
 redis-cli  -a 'aming>com'
 将config命令改名
 rename-command CONFIG aming
 禁掉config命令 
 rename-command CONFIG “”

8.redis慢查询日志

针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。

# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
//单位ms,表示慢于1000ms则记录日志
slowlog-log-slower-than 10000

# There is no limit to this length. Just be aware that it will consume memory.
# You can reclaim memory used by the slow log with SLOWLOG RESET.
//定义日志长度,表示最多存128条
slowlog-max-len 128


slowlog get //列出所有的慢查询日志
slowlog get 2 //只列出2条
slowlog len //查看慢查询日志条数

9.php安装redis扩展


wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip

[root@knightlai02 src]# unzip  phpredis.zip 
Archive:  phpredis.zip
837b1ae51fb2e79849f35cc21f373a4c3187f828
   creating: phpredis-develop/
  inflating: phpredis-develop/.gitignore  
  inflating: phpredis-develop/.travis.yml  
  inflating: phpredis-develop/COPYING  
  inflating: phpredis-develop/CREDITS  
  inflating: phpredis-develop/ISSUE_TEMPLATE.md  
  inflating: phpredis-develop/README.markdown

[root@knightlai02 phpredis-develop]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@knightlai02 phpredis-develop]# vim /usr/local/php-fpm/etc/php.ini
;extension=php_pgsql.dll
;extension=php_shmop.dll
extension=memcache.so
extension=redis.so


10.redis存储session

vim /usr/local/php-fpm/etc/php.ini//更改或增加 
 或者php-fpm配置文件对应的pool中增加:
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "



wgt http://study.lishiming.net/.mem_se.txt
 mv .mem_se.txt  /usr/local/apache2/htdocs/session.php
 其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
 curl localhost/session.php //结果类似于1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440
 命令行连接redis,也可以查看到该key以及对应的值
 如果想用php连接redis cluster,需要使用predis扩展
 安装方法类似phpredis,predis扩展地址https://github.com/nrk/predis

11.redis主从配置

[root@knightlai02 ~]#  vim /etc/redis2.conf
port 63793
dir /data/redis_data2/
pidfile /var/run/redis_6380.pid
logfile "/var/log/redis2.log"


增加一行
slaveof 127.0.0.1 6379

//在主上增加一个key6
[root@knightlai02 ~]# redis-server /etc/redis.conf
[root@knightlai02 ~]# redis-cli
127.0.0.1:6379> set key6 eee
OK
127.0.0.1:6379> get key6
"eee"

//在从上查询刚刚在主上创建的key6发现同步过来了
[root@knightlai02 ~]# redis-cli -p 63793
127.0.0.1:63793> get key6
"eee"
//也可以连接进去查看信息,也可以看到主从复制信息
127.0.0.1:6379> info
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:70
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:daa3aa21260ed5acf8eae209a1c8a2727b06dc0f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70


12. redis集群介绍

多个redis节点网络互联,数据共享  所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用  不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。  支持在线增加、删除节点  客户端可以连任何一个主节点进行读写

13.redis集群搭建配置

安装ruby2.2 (只需要一台机器上运行)

  •  yum -y groupinstall "Development Tools"
  •  yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve
  •  cd /root/
  •  mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
  •  wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES
  •  wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS
  •  rpmbuild -bb rpmbuild/SPECS/ruby22x.spec
  •  yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm
  •  gem install redis
//启动三主
[root@knightlai02 ~]# ps -ef|grep redis
root       1822      1  0 03:19 ?        00:00:36 redis-server 127.0.0.1:63793
root      35066      1  0 04:31 ?        00:00:30 redis-server 127.0.0.1:6379 [cluster]
root      36834      1  0 19:15 ?        00:00:00 redis-server 127.0.0.1:7001 [cluster]
root      36866      1  0 19:18 ?        00:00:00 redis-server 127.0.0.1:7008 [cluster]
//启动三从
[root@knightlai01 redis-4.0.1]# ps -ef|grep redis
root       4866      1  0 03:33 ?        00:00:23 redis-server 127.0.0.1:63791
root       4872      1  0 03:35 ?        00:00:23 redis-server 127.0.0.1:63792
root       5920      1  0 19:34 ?        00:00:00 redis-server 127.0.0.1:7079 [cluster]
root       5934      1  0 19:38 ?        00:00:00 redis-server 127.0.0.1:7800 [cluster]
root       5944      1  1 19:39 ?        00:00:00 redis-server 127.0.0.1:7801 [cluster]

启动集群redis

[root@knightlai02 redis-4.0.1]# redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:7001 127.0.0.1:7008 192.168.139.131:7079 192.168.139.131:7800 192.168.139.131:7801
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:6379
192.168.139.131:7079
127.0.0.1:7001
Adding replica 192.168.139.131:7800 to 127.0.0.1:6379
Adding replica 127.0.0.1:7008 to 192.168.139.131:7079
Adding replica 192.168.139.131:7801 to 127.0.0.1:7001
M: 24abf39137461be2bc80214a8ac06d29144acf91 127.0.0.1:6379
   slots:0-5460,9057,9189,13120 (5464 slots) master
M: 89d8fd23085124f9dc7a3cd8255d459abd3bb840 127.0.0.1:7001
   slots:935,4866,4998,9057,9189,10923-16383 (5466 slots) master
S: 86530cf4c6bb7ad2ea66863081c620ff0c15f124 127.0.0.1:7008
   replicates 37f3a03a3b19aa4dcaf149332826b2550d1fbea5
M: 37f3a03a3b19aa4dcaf149332826b2550d1fbea5 192.168.139.131:7079
   slots:5461-10922 (5462 slots) master
S: e9500dec4c47ab60ba6893df79fefa75699df62f 192.168.139.131:7800
   replicates 24abf39137461be2bc80214a8ac06d29144acf91
S: 83f808aa3759fbfb20b90423956d00cb8242fda7 192.168.139.131:7801
   replicates 89d8fd23085124f9dc7a3cd8255d459abd3bb840
Can I set the above configuration? (type 'yes' to accept): yes
/usr/lib64/ruby/gems/2.2.0/gems/redis-4.0.3/lib/redis/client.rb:124:in `call': ERR Slot 935 is already busy (Redis::CommandError)
	from /usr/lib64/ruby/gems/2.2.0/gems/redis-4.0.3/lib/redis.rb:2855:in `block in cluster'
	from /usr/lib64/ruby/gems/2.2.0/gems/redis-4.0.3/lib/redis.rb:50:in `block in synchronize'
	from /usr/lib64/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
	from /usr/lib64/ruby/gems/2.2.0/gems/redis-4.0.3/lib/redis.rb:50:in `synchronize'
	from /usr/lib64/ruby/gems/2.2.0/gems/redis-4.0.3/lib/redis.rb:2854:in `cluster'
	from /usr/bin/redis-trib.rb:212:in `flush_node_config'
	from /usr/bin/redis-trib.rb:776:in `block in flush_nodes_config'
	from /usr/bin/redis-trib.rb:775:in `each'
	from /usr/bin/redis-trib.rb:775:in `flush_nodes_config'
	from /usr/bin/redis-trib.rb:1296:in `create_cluster_cmd'
	from /usr/bin/redis-trib.rb:1700:in `<main>'

 14. redis集群操作

以集群的方式登录

  • cluster nodes//列出节点
  •  cluster info//查看集群信息
  •  cluster meet ip port //添加节点
  •  cluster forget node_id //移除某个节点
  •  cluster replicate node_id//将当前节点设置为指定节点的从
  •  cluster saveconfig//保存配置文件
[root@knightlai02 redis-4.0.1]# redis-cli -c -h 127.0.0.1 -p 6379
127.0.0.1:6379> cluster nodes
24abf39137461be2bc80214a8ac06d29144acf91 :6379@16379 myself,master - 0 0 0 connected 935 4866 4998 9057 9189 13120
127.0.0.1:6379> cluster info
cluster_state:fail
cluster_slots_assigned:6
cluster_slots_ok:6
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:1
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/84136886
今日推荐