- 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)錯誤時,是否禁止新的寫入操作請求,默認yesrdbcompression 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%,且大小不少于64MBaof-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)并行復制,通常需要在復制啟動前延遲一個時間段,默認5srepl-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ā)揮功能。