1. 程式人生 > >第三十五課預習任務

第三十五課預習任務

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安裝

[[email protected] ~]# cd /usr/local/src
[[email protected] 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’
[
[email protected]
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]

解壓

[[email protected] 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
....................................................

//編譯安裝
[[email protected] 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

編輯配置檔案修改以下檔案改為以下這個


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


[[email protected] redis-4.0.1]# mkdir /data/redis_data

設定核心檔案:

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

//啟動redis並檢視是否成功
[[email protected] redis-4.0.1]# redis-server /etc/redis.conf
[[email protected] 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相關命令:

[[email protected] 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

[[email protected] 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

[[email protected] phpredis-develop]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[[email protected] 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主從配置

[[email protected] ~]#  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
[[email protected] ~]# redis-server /etc/redis.conf
[[email protected] ~]# redis-cli
127.0.0.1:6379> set key6 eee
OK
127.0.0.1:6379> get key6
"eee"

//在從上查詢剛剛在主上建立的key6發現同步過來了
[[email protected] ~]# 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
//啟動三主
[[email protected] ~]# 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]
//啟動三從
[[email protected] 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

[[email protected] 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//儲存配置檔案
[[email protected] redis-4.0.1]# redis-cli -c -h 127.0.0.1 -p 6379
127.0.0.1:6379> cluster nodes
24abf39137461be2bc80214a8ac06d29144acf91 :[email protected] 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