20171116 Redis

  • NoSQL
  • Redis基礎
  • Redis配置文件基礎
  • Redis的持久化
  • Redis的復制
  • Redis的集群

一、NoSQL

(一)基本概念

  • NoSQL:Not Only SQL,非關(guān)系型、分布式、開源、水平可擴展的數(shù)據(jù)庫
  • 特性:數(shù)據(jù)量大、數(shù)據(jù)變化非??欤〝?shù)據(jù)增長快、流量分布變化大、數(shù)據(jù)間耦合結(jié)構(gòu)變化快)、數(shù)據(jù)源很多

(二)設計原則

(1)CAP理論:
  • 一個分布式系統(tǒng)不可能同時滿足C、A、P三個特性,最多可同時滿足其中兩者;對于分布式系統(tǒng)滿足分區(qū)容錯性幾乎是必須的
  • C:Consistency,多個數(shù)據(jù)節(jié)點上的數(shù)據(jù)一致
  • A:Availablity,用戶發(fā)出請求后的有限時間范圍內(nèi)返回結(jié)果
  • P:Partition tolerence,網(wǎng)絡發(fā)生分區(qū)后(network partition),服務是否依然可用
(2)BASE:BA,S,E,基于CAP演化而來
  • BA:Basically Available,基本可用
  • S:Soft state,軟狀態(tài)/柔性事務,即狀態(tài)可以在一個時間窗口內(nèi)是不同步的
  • E:Eventually consistency,最終一致性

(三)分類和主流產(chǎn)品

  • Key Value / Tuple Store:鍵值存儲,DynamoDB, redis
  • Wide Column Store / Column Families:列式數(shù)據(jù)庫,hbase
  • Document Store:文檔數(shù)據(jù)庫,mongodb, Elastic
  • Graph Databases:圖式數(shù)據(jù)庫,Neo4j
  • Time Series / Streaming Databases:時間序列存儲

二、Redis基礎

(一)簡介:

  • 開源、內(nèi)存存儲、數(shù)據(jù)結(jié)構(gòu)存儲
  • 可用作:數(shù)據(jù)庫、緩存、消息隊列
  • 數(shù)據(jù)結(jié)構(gòu):字符串、列表(數(shù)組)、hashes(關(guān)聯(lián)數(shù)組)、集合、有序集合、bitmaps、hyperloglogs、空間索引

(二)程序環(huán)境:

  • 配置文件:/etc/redis.conf
  • 主程序:/usr/bin/redis-server
  • 端口:6379/tcp
  • 客戶端:/usr/bin/redis-cli
  • Unit File:/usr/lib/systemd/system/redis.service
  • 數(shù)據(jù)目錄:/var/lib/redis

(三)客戶端的基本操作

(1)K/V 數(shù)據(jù)結(jié)構(gòu)
  • key:直接ASCII字符串;
  • value:strings, lists, hashes, sets, sorted sets, bitmaps, hyperloglogs
(2)radis-cli工具的使用
  • 交互式界面:直接輸入radis-cli進入

  • 幫助:輸入HELP,按Tab鍵切換value類型

  • 數(shù)據(jù)庫:只有0-15共16個數(shù)據(jù)庫,使用SELECT #命令切換,默認為0數(shù)據(jù)庫

  • @string
    SET:新增一條鍵值對
    GET:查看鍵對應的值
    EXISTS
    INCR:整數(shù)值自增1
    DECR:整數(shù)值自減1
    SETNX:只在沒有此鍵時添加鍵值對
    SETEX:添加一條鍵值對并設定過期時間
    INCRBYFLOAT:按給定數(shù)值增加整數(shù)值
    MGET:查看多個鍵對應的值
    MSET:新增多條鍵值對

SET:新增,GET:查詢,APPEND:添加,STRLEN:長度

SETNX:不存在時新增,INCR:自增1,INCRBY count 2:自增2,DEL:刪除

  • @list:數(shù)組
    LPUSH:從左側(cè)新增鍵值對
    RPUSH:從右側(cè)新增鍵值對
    LPOP:從左側(cè)移除鍵值對
    RPOP:從右側(cè)移除鍵值對
    LPUSHX:僅當list存在時,從左側(cè)新增鍵值對
    RPUSHX:僅當list存在時,從右側(cè)新增鍵值對
    LRANGE:查看某個范圍
    LINDEX:通過索引查看
    LSET:通過list的索引修改元素的值

LPUSH:從左側(cè)添加,LINDEX weekdays 0:查看索引為0的元素值

LRANGE weekdays 0 4:查看索引0至4的元素值
LINSERT weekdays AFTER Tue Wed:在元素后Tue插入Wed

LPOP:左側(cè)移除,RPOP:右側(cè)移除,LLEN:list的長度

  • @set:集合
    SADD:集合中添加成員
    SPOP:從集合中隨機刪除成員
    SREM :從集合中刪除成員
    SRANDMEMBER:隨機查看集合中的成員
    SINTER:做交集
    SUNION:做并集

SADD:添加成員,SMEMBERS:查看成員

SINTER:查看交集結(jié)果,SUNION:查看并集結(jié)果

SREM:刪除指定成員,SPOP:隨機刪除成員

  • @sorted_set:有序集合
    ZADD:從集合中添加成員,若存在則為更新成員的值
    ZCARD:查看有序集合成員數(shù)
    ZCOUNT:按照所賦予的值,輸出指定排序范圍的成員數(shù)
    ZRANK:按照所賦予的值,輸出指定排序范圍的成員

ZADD:添加有序集合的成員,ZSCORE:查看成員所賦予的值

ZRANK:查看指定成員的排序,ZRANGE:查看指定排序范圍的成員,ZRANGEBYSCORE:查看指定排序范圍的成員

  • @hash:關(guān)聯(lián)數(shù)組
    HSET:新增包含一個鍵值對的關(guān)聯(lián)數(shù)組
    HMSET:新增包含多個鍵值對的關(guān)聯(lián)數(shù)組
    HGET:查看關(guān)聯(lián)數(shù)組的一個鍵值對
    HMGET:查看關(guān)聯(lián)數(shù)組的多個鍵值對
    HKEYS:查看關(guān)聯(lián)數(shù)組的所有鍵
    HVALS:查看關(guān)聯(lián)數(shù)組的所有值
    HDEL:刪除關(guān)聯(lián)數(shù)組的鍵值對
    HGETALL:查看關(guān)聯(lián)數(shù)組的所有鍵和對應的值

HMSET:在一個hash中創(chuàng)建多個鍵值對,HKEYS:查看鍵,HVALS:查看鍵對應的值

HGETALL:查看hash的所有鍵值對,HDEL:刪除鍵值對

  • @pubsub
    PUBLISH:向頻道扇出一條信息
    SUBSCRIBE:訂閱指定頻道
    UNSUBSCRIBE:退訂指定頻道
    PSUBSCRIBE:按pattern規(guī)則訂閱頻道
    PUNSUBSCRIBE:按pattern規(guī)則退訂頻道

PUBLISH:扇出信息

SUBSCRIBE:訂閱并接受信息

  • @geo:空間索引

  • @server
    Server相關(guān)的命令:
    CLIENT GETNAME:查詢當前連接名稱
    CLIENT KILL:殺死客戶端的連接
    CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
    CLIENT LIST:列出客戶端連接
    CLIENT PAUSE:暫停執(zhí)行客戶端指令一段時間
    CLIENT PAUSE timeout
    CLIENT REPLY:告訴服務器是否回應指令
    CLIENT SETNAME:設置當前連接名稱
    SHUTDOWN [NOSAVE|SAVE]:關(guān)閉服務器
    CONFIG GET:查看配置參數(shù)
    CONFIG RESETSTAT:重置配置參數(shù)
    CONFIG REWRITE:將配置寫入配置文件,實現(xiàn)運行時永久修改
    CONFIG SET:設置配置參
    數(shù)
    INFO:INFO [section],服務器狀態(tài)信息查看,可分為多個secion查看
    FLUSHDB:清空當前數(shù)據(jù)庫
    FLUSHALL:清空所有數(shù)據(jù)庫

CONFIG SET:實時修改配置

CONFIG REWRITE:配置文件中自動生成相應配置信息

INFO:服務器狀態(tài)信息

三、Redis配置文件基礎

  • 配置文件分為如下章節(jié):
    INCLUDES:包含其他配置文件的路徑
    NETWORK:網(wǎng)絡配置項
    GENERAL:基本配置項
    SNAPSHOTTING:快照持久化相關(guān)配置
    REPLICATION:復制相關(guān)配置
    SECURITY:安全相關(guān)配置
    LIMITS:限制相關(guān)的配置
    SLOW LOG:慢日志相關(guān)的配置
    ADVANCED CONFIG:高級配置

  • 通用配置項:
    daemonize on
    supervised no
    loglevel notice:日志級別
    pidfile /var/run/redis/redis.pid:pid文件路徑
    logfile /var/log/redis/redis.log:日志文件路徑
    databases:設定數(shù)據(jù)庫數(shù)量,默認為16個,每個數(shù)據(jù)庫的名字均為整數(shù),從0開始編號,默認操作的數(shù)據(jù)庫為0

  • 網(wǎng)絡配置項:
    bind IP:綁定IP
    port PORT:監(jiān)聽端口
    protected-mode yes:安全模式
    tcp-backlog 511:后援隊列長度
    unixsocket:socket文件路徑
    timeout:連接的空閑超時時長

  • 安全配置:
    requirepass <PASSWORD>
    rename-command <COMMAND> <NEW_CMND_NAME>:修改命令名稱
    在AOF或Replication環(huán)境中,不推薦使用

設置密碼后,在redis-cli中使用AUTH password命令驗證密碼

  • Limits相關(guān)的配置:
    maxclients 10000:并發(fā)客戶端連接數(shù)
    maxmemory <bytes>:最大內(nèi)存使用容量,超出時按照maxmemory-policy設置的策略刪除鍵值
    maxmemory-policy noeviction:淘汰策略

    volatile-lru:從接近過期時間的鍵值中采用LRU算法淘汰
    allkeys-lru:從所有鍵值中采用LRU算法淘汰
    volatile-random:從接近過期時間的鍵值中隨機淘汰
    allkeys-random:從全部鍵值中隨機淘汰
    volatile-ttl:從最接近過期時間的鍵值開始淘汰 
    noeviction:不刪除鍵值,寫操作直接報錯
    

    maxmemory-samples 5: 淘汰算法運行時的采樣樣本數(shù)

  • SlowLog相關(guān)的配置:
    slowlog-log-slower-than 10000:超過多少時間被記錄進慢查詢?nèi)罩荆瑔挝皇俏⒚?br> slowlog-max-len 128:慢查詢?nèi)罩咀畲髼l目

  • Advanced配置:
    hash-max-ziplist-entries 512:設置ziplist的鍵數(shù)量最大值
    hash-max-ziplist-value 64:每個值的最大空間
    client-output-buffer-limit normal 0 0 0:普通客戶端輸出緩沖限制
    client-output-buffer-limit slave 256mb 64mb 60:從服務器客戶端輸出緩沖限制
    client-output-buffer-limit pubsub 32mb 8mb 60:隊列客戶端輸出緩沖限制
    三個值的說明:<hard-limit> <soft-limit> <soft-limit seconds>,一般情況不能超過<soft-limit>,任何情況絕對不能超過<hard-limit>,超過<soft-limit>的部分在<soft-limit seconds>的寬限期后將被刪除

四、Redis的持久化

(一)持久化的兩種方式

  • RDB:snapshotting,二進制格式
    按事先定制的策略,周期性地將數(shù)據(jù)從內(nèi)存同步至磁盤
    數(shù)據(jù)文件默認為dump.rdb
    客戶端顯式使用SAVE或BGSAVE命令來手動啟動快照保存機制
    SAVE:同步,即在主線程中保存快照,此時會阻塞所有客戶端請求
    BGSAVE:異步,后臺執(zhí)行

  • AOF:Append Only File, fsync
    記錄每次寫操作至指定的文件尾部實現(xiàn)的持久化
    當redis重啟時,可通過重新執(zhí)行文件中的命令在內(nèi)存中重建出數(shù)據(jù)庫
    BGREWRITEAOF:AOF文件重寫,后臺執(zhí)行
    不會讀取正在使用AOF文件,而是通過將內(nèi)存中的數(shù)據(jù)以命令的方式保存至臨時文件中,完成之后替換原來的AOF文件

  • RDB模式效率更高,AOF模式時間精度更高

(二)RDB相關(guān)的配置:

  • save <seconds> <changes>

    save 900 1
    save 300 10
    save 60 10000
    

    表示:三個策略滿足其中任意一個均會觸發(fā)SNAPSHOTTING操作,即:
    900s內(nèi)至少有一個key有變化
    300s內(nèi)至少有10個key有變化
    60s內(nèi)至少有1W個key發(fā)生變化

  • stop-writes-on-bgsave-error yes
    dump操作出現(xiàn)錯誤時,是否禁止新的寫入操作請求,默認yes

  • rdbcompression yes:復制時是否支持壓縮,默認yes

  • rdbchecksum yes:復制時是否檢驗完整性,默認yes

  • dbfilename dump.rdb:指定rdb文件名

  • dir /var/lib/redis:rdb文件的存儲路徑

(三)AOF相關(guān)的配置

  • appendonly no:是否打開AOF模式,默認no

  • appendfilename "appendonly.aof":指定rof文件名

  • appendfsync:AOF同步模式,支持三種模式
    no:不執(zhí)行主動同步操作,而是OS進行
    everysec:每秒一次
    always:每語句一次

  • no-appendfsync-on-rewrite no
    是否在后臺執(zhí)行aof重寫期間不調(diào)用fsync,默認為no,表示調(diào)用

  • auto-aof-rewrite-percentage 100

  • auto-aof-rewrite-min-size 64mb
    上述兩個條件同時滿足時,方會觸發(fā)重寫AOF,即
    與上次aof文件大小相比,其增長量超過100%,且大小不少于64MB

  • aof-load-truncated yes

(四)其他

  • 注意:持久機制本身不能取代備份;應該制訂備份策略,對redis庫定期備份;

  • RDB與AOF同時啟用:
    BGSAVE和BGREWRITEAOF不會同時進行
    Redis服務器啟動時用持久化的數(shù)據(jù)文件恢復數(shù)據(jù),會優(yōu)先使用AOF

五、Redis的復制

(一)特點:

  • 一個Master可以有多個Slave主機,支持鏈式復制
  • Master以非阻塞方式同步數(shù)據(jù)至Slave主機

(二)方法一:配置slave節(jié)點

  • redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>:指明主節(jié)點的IP和端口
  • redis-cli> CONFIG SET masterauth <PASSWORD>:主節(jié)點密碼認證

(三)方法二:配置參數(shù)

(1)必須配置的參數(shù)
  • slaveof
  • masterauth
(2)其他視情況配置的參數(shù)
  • slave-serve-stale-data yes:從節(jié)點是否使用過時的數(shù)據(jù)提供服務,默認yes

  • slave-read-only yes:從節(jié)點是否只讀,默認yes

  • repl-diskless-sync no:是否使用無盤方式復制,由以下三種模式
    no, Disk-backed, Diskless

    • 新的從節(jié)點或某較長時間未能與主節(jié)點進行同步的從節(jié)點重新與主節(jié)點通信,需要做"full synchronization",此時其同步方式有兩種style:
    • Disk-backend:主節(jié)點新創(chuàng)建快照文件于磁盤中,而后將其發(fā)送給從節(jié)點
    • Diskless:主節(jié)點新創(chuàng)建快照后直接通過網(wǎng)絡套接字文件發(fā)送給從節(jié)點
  • repl-diskless-sync-delay 5
    當使用Diskless模式時,為了實現(xiàn)并行復制,通常需要在復制啟動前延遲一個時間段,默認5s

  • repl-ping-slave-period 10:從節(jié)點向主節(jié)點發(fā)送ping的間隔,默認10s

  • repl-timeout 60:復制超時時間,默認60s

  • repl-disable-tcp-nodelay no:是否禁用tcp延遲發(fā)送,默認不禁用

  • repl-backlog-size 1mb:消息隊列長度

  • slave-priority 100
    復制集群中,主節(jié)點故障時,sentinel應用場景中的主節(jié)點選舉時使用的優(yōu)先級
    數(shù)字越小優(yōu)先級越高,但0表示不參與選舉

  • min-slaves-to-write 3
    主節(jié)點僅允許其能夠通信的從節(jié)點數(shù)量大于等于此處的值時接受寫操作

  • min-slaves-max-lag 10
    從節(jié)點延遲時長超出此處指定的時長時,主節(jié)點會拒絕寫入操作

(四)實驗1:實現(xiàn)Redis的復制

  • 實驗環(huán)境:
    主節(jié)點IP:192.168.136.230
    從節(jié)點1的IP:192.168.136.130
    從節(jié)點2的IP:192.168.136.131
(1)編輯主從節(jié)點的配置文件,修改監(jiān)聽IP,配置密碼認證
vim /etc/redis.conf
bind 0.0.0.0
requirepass centos
(2)編輯從節(jié)點1的配置文件
slaveof 192.168.136.230 6379     // 指向主節(jié)點的IP和端口
masterauth centos                // 主節(jié)點的認證密碼
(3)通過redis-cli命令配置從節(jié)點2的設置
redis-cli -h 192.168.136.131
192.168.136.131:6379> AUTH centos
192.168.136.131:6379> SLAVEOF 192.168.136.230 6379     // 指向主節(jié)點的IP和端口
192.168.136.131:6379> CONFIG SET masterauth centos     // 主節(jié)點的認證密碼
192.168.136.131:6379> CONFIG GET masterauth
192.168.136.131:6379> CONFIG GET slave-read-only
192.168.136.131:6379> CONFIG REWRITE                   // 寫入配置文件
(4)啟動主次節(jié)點的服務,測試配置

主節(jié)點上查看連接的從節(jié)點:127.0.0.1:6379> CLIENT LIST

主節(jié)點查看Replication章節(jié)的信息,可以看到從節(jié)點的相關(guān)信息

從節(jié)點1查看Replication章節(jié)的信息,可以看到主節(jié)點IP和當前連接狀態(tài)

從節(jié)點2查看Replication章節(jié)的信息,可以看到主節(jié)點IP和當前連接狀態(tài)

主節(jié)點查看所有鍵

從節(jié)點1查看所有鍵,成功同步

從節(jié)點2查看所有鍵,成功同步

(五)sentinel

(1)sentinel簡介
  • 主要完成三個功能:監(jiān)控、通知、自動故障轉(zhuǎn)移
  • 選舉:流言協(xié)議(向網(wǎng)絡內(nèi)多臺主機確認主節(jié)點是否宕機)、投票協(xié)議(少數(shù)服從多數(shù))
(2)配置項
  • 配置文件:/etc/redis.conf

  • port 26379:默認監(jiān)聽端口,26379

  • sentinel monitor <master-name> <ip> <redis-port> <quorum>
    主節(jié)點IP和端口
    <quorum>:表示sentinel集群的quorum機制,即至少有quorum個sentinel節(jié)點同時判定主節(jié)點故障時,才認為其是真的故障
    s_down: subjectively down,主觀宕機,單個sentinel服務器獨自判定主節(jié)點是否宕機
    o_down: objectively down,客觀宕機,多個sentinel服務器投票決定主節(jié)點是否宕機

  • sentinel auth-pass <master-name> <password> :主節(jié)點認證

  • sentinel down-after-milliseconds <master-name> <milliseconds>
    監(jiān)控到指定的集群的主節(jié)點異常狀態(tài)持續(xù)多久方才將標記為“故障”

  • sentinel parallel-syncs <master-name> <numslaves>
    指在failover過程中,能夠被sentinel并行配置的從節(jié)點的數(shù)量;

  • sentinel failover-timeout <master-name> <milliseconds>
    sentinel必須在此指定的時長內(nèi)完成故障轉(zhuǎn)移操作,否則,將視為故障轉(zhuǎn)移操作失敗

  • sentinel notification-script <master-name> <script-path>
    通知腳本,此腳本被自動傳遞多個參數(shù)

(3)命令行選項

redis-cli -h SENTINEL_HOST -p SENTINEL_PORT
SENTINEL masters:查看主節(jié)點
SENTINEL slaves <MASTER_NAME>:查看指定主節(jié)點的從節(jié)點
SENTINEL failover <MASTER_NAME>
SENTINEL get-master-addr-by-name <MASTER_NAME>

(六)實驗2:實現(xiàn)sentinel監(jiān)控主機狀態(tài),當主節(jié)點發(fā)生故障時自動轉(zhuǎn)移

  • 實驗環(huán)境:
    繼承實驗1的主從節(jié)點環(huán)境,為減少實驗系統(tǒng)開銷,主節(jié)點、從節(jié)點1、從節(jié)點2共三臺主機全部兼任sentinel服務器
    根據(jù)quorum機制,只有大于過半數(shù)的節(jié)點認定主節(jié)點宕機才會視作主機宕機,故quorum值為2
(1)編輯三臺主機的sentinel配置文件
vim /etc/redis-sentinel.conf
bind 0.0.0.0
sentinel monitor mymaster 192.168.136.230 6379 2
sentinel auth-pass mymaster centos
sentinel down-after-milliseconds mymaster 30000
(2)啟動redis-sentinel服務,并測試
systemctl start redis-sentinel
登錄sentinel服務器
redis-cli -h 192.168.136.230 -p 26379
SENTINEL masters             // 查詢主節(jié)點信息
SENTINEL slaves mymaster     // 查詢從節(jié)點信息

SENTINEL masters,查詢主節(jié)點信息,當前為192.168.136.230,符合預期

SENTINEL slaves mymaster,查詢從節(jié)點信息,當前為192.168.136.130和192.168.136.131,符合預期

(3)關(guān)閉主節(jié)點的redis服務,造成宕機狀況,測試故障轉(zhuǎn)移功能
systemctl stop redis         // 192.168.136.230主機上操作
redis-cli -h 192.168.136.131 -p 26379
SENTINEL masters             // 查詢主節(jié)點信息
SENTINEL slaves mymaster     // 查詢從節(jié)點信息

192.168.136.130已經(jīng)變?yōu)橹鞴?jié)點

192.168.136.230已經(jīng)降為從節(jié)點,由于宕機目前不可用

192.168.136.131仍舊保持從節(jié)點的身份

(4)修復主機192.168.136.230,并重新上線
vim /etc/redis.conf
slaveof 192.168.136.130 6379     // 設置為新的主節(jié)點IP
masterauth centos
systemctl start redis

成功上線

六、Redis的集群

(一)redis的集群技術(shù):

Twitter:twemproxy,Twitter已經(jīng)不再使用
豌豆莢:codis
原生:redis cluster

(二)redis cluster集群相關(guān)的配置:

  • cluster-enabled
    是否開啟集群配置
  • cluster-config-file
    集群節(jié)點集群信息配置文件,每個節(jié)點都有一個,由redis生成和更新,配置時避免名稱沖突
  • cluster-node-timeout
    集群節(jié)點互連超時的閾值,單位毫秒
  • cluster-slave-validity-factor
    進行故障轉(zhuǎn)移時,salve會申請成為master。有時slave會和master失聯(lián)很久導致數(shù)據(jù)較舊,這樣的slave不應該成為master。這個配置用來判斷slave是否和master失聯(lián)時間過長。

(三)實驗3:實現(xiàn)redis集群

  • 提示:注意關(guān)閉之前實驗的sentinel服務,將主從節(jié)點的相關(guān)配置恢復,然后重啟redis服務
(1)設置配置文件,啟用集群功能
vim /etc/redia.conf     // 每個節(jié)點都要如此設置
cluster-enabled yes
cluster-config-file nodes-6379.conf
systemctl restart redis
(2)啟動redis后為每個節(jié)點分配slots
systemctl restart redis
redis-cli -h 192.168.136.230 -a centos CLUSTER ADDSLOTS {0..5461}
redis-cli -h 192.168.136.130 -a centos CLUSTER ADDSLOTS {5462..10923}
redis-cli -h 192.168.136.131 -a centos CLUSTER ADDSLOTS {10924..16383}

注意:每個slot要獨立創(chuàng)建;可用范圍是0-16383,共16384個

使用CLUSTER INFO查看集群信息,可以看到已經(jīng)分配相應數(shù)量的slot,但是集群狀態(tài)還是fail

(3)設定集群成員關(guān)系
redis-cli -h 192.168.136.230 -a centos
CLUSTER MEET 192.168.136.130 6379
CLUSTER MEET 192.168.136.131 6379
CLUSTER INFO

再次使用CLUSTER INFO查看集群信息,集群狀態(tài)已經(jīng)ok狀態(tài)

(4)測試集群功能
redis-cli -h 192.168.136.230 -a centos
192.168.136.230:6379> SET testkey1 hi
OK
192.168.136.230:6379> SET testkey2 hello
(error) MOVED 14758 192.168.136.131:6379
// 返回結(jié)果要求到192.168.136.131的節(jié)點執(zhí)行操作
redis-cli -h 192.168.136.131 -a centos
192.168.136.131:6379> SET testkey2 hello
OK
192.168.136.131:6379> SET testkey3 sayhello
(error) MOVED 10631 192.168.136.130:6379

192.168.136.230成功存儲testkey1鍵值對,但是節(jié)點要求去192.168.136.131存儲testkey2鍵值對

192.168.136.131成功存儲testkey2鍵值對,但是節(jié)點要求去192.168.136.130存儲testkey3鍵值對

注意:當對redis cluster中的某個節(jié)點寫數(shù)據(jù)時,可能會要求存儲至其他節(jié)點。即可以向任意一個節(jié)點發(fā)起請求,節(jié)點可能會接收請求,也可能返回去其他節(jié)點完成操作的結(jié)果。故實際使用中,redis cluster需要與智能客戶端協(xié)同發(fā)揮功能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內(nèi)容

  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,083評論 1 51
  • 大小固定//自定義一個Cell @interfaceMMCell:UITableViewCell @end @im...
    陳世美_閱讀 590評論 0 2
  • 寫在前面的話: 學英語挺難的,但是如果找到別有意義的方法去記住詞匯,那么就不會太難。本文受到了一檔英文脫口秀節(jié)目的...
    姚石之言閱讀 39,031評論 5 26
  • 今天是團日活動,我們護理省內(nèi)班的春游。 昨晚想定七點起床的,但小黃說七點半起 我?guī)еS刺的心情同意了。我覺得七點半...
    木刻茉莉閱讀 266評論 0 0
  • 從20多年前剛剛開始工作起,為了看海就天南地北地跑了很多地方。好幾次冒著被上司責怪的后果。終于有一天,對自...
    入流亡所閱讀 369評論 0 2