【Redis】Redis學習筆記

Redis學習筆記


參考官方文檔

一、common item

1.1 redis-cli:

  • 常用選項
    redis-cli -h <hostname> -p <port> -a <passwd> -u <uri>
    redis-cli -u redis://passwd@hostname:port/0

  • 常見集羣操作命令:

    1. config get // 不用重啓情況下的配置更新和查看
    2. config set
    3. flushall 清庫
    4. select 2 // 切換db,一般一個redis實例可以有多個db,這個db可以通過配置調整,通過select進行切換, 默認連接db0
    5. dbsize 查看db大小
    6. ping pong // 實例可用性
    7. connect hostname port // 切換當前連接實例
    8. debug restart // 重啓本實例, redis-cli默認會一直重試至連接上未知,如果連不上,會顯示當前error和斷連接狀態, 一般這個命令不允許執行, 連接上之後,redis-cli會默認連接至上次連接的db
    9. 使用multi可以連續執行多個命令,如
      multi 開始記錄
      ping
      ping
      ...
      set a b
      get a
      exec 開始執行
    10. clear 清屏
    11. info
    12. info replication 可以查看當前實例的信息(主?從?)
  • 特殊操作模式
    redis-cli -p 5555 --stat -i <interval>查看當前數據情況,負載情況, 默認15秒一次
    redis-cli --bigkeys 查看大key
    redis-cli --scan | head -10 使用scan參數,而非KEYS , 避免redis server阻塞
    redis-cli --scan --pattern '
    -11*' 查找符合匹配規則的key
    redis-cli Pub/Sub 模式暫時不看[TODO]
    reids-cli monitor //打印當前實例收到的所有命令, 什麼時候,來自哪個套接字的哪個命令
    redis-cli --latency //延遲監控 --latency-history, --latency-dist
    redis-cli --rdb /tmp/dump.rdb // 遠程備份某個redis實例的數據至本地
    redis-cli --slave // 讓當前cli模擬一個slave的狀態, 獲取master給slave發送的同步replication stream
    當redis被用作cache服務器的時候,通過maxmemory來設定一個上限值,配合LRU算法進行內存驅逐,暫時不看詳情參考[TODO]

1.2 configration:

  • redis配置生效方式

    1. 命令行 redis-server -p 4444 --slaveof hostname port
    2. 通過配置文件指定(生產推薦) redis-server [/path/to/redis.conf]
    3. 通過交互更改 CONFIG GET CONFIG SET
  • 官方配置參考5.0版本
  • 我司配置樣例cluster模式參考最後附錄1

1.3 replication

  • 機制:
    1. master會將所有的命令stream發送給replica, 包括cli write, keys expire, 和其他操作
    2. 當master replica斷鏈接重連後,replica會嘗試獲取在斷鏈期間丟失的數據,部分同步
    3. 當部分同步行不通時,replica會請求一個全同步,觸發master的snapshot,然後將其發送個replica,然後再去重寫數據
  • 同步方式
    1. 默認async, sync可選,sync暫時不瞭解
  • 其他
    1. 當master沒有配置持久化的時候,不能打開其自動重啓功能,一般重啓功能都在k8s中定義,因爲一旦master沒有持久化,而且重啓了,會導致旗下所有slave同步它的空數據
    2. redis replication原理,replication中的每個節點,不管是master還是replica,都有一個基於數據集產生的一個replicationID, 類似這樣ReplicationID, offset, 每當有master將自己的replicationstream發送給slvae時,這個offset就會增加相應的字節數
    3. 當slave鏈接到master的時候,會使用PSYNC命令,將之前他鏈接的masterReplicationID,連同他當前的處理進度(他自己的offsetS), 然後master就會將相比於offsetS,新增的replicationStream發送給slave
    4. 到底哪個slave在failover的時候能夠當選?——<font color='red'>不能配置某個必須當選,但是可以配置某些絕對不能當選</font>
  • replication的創建
    1. 加入master: 5.0 使用replicaof, 其他版本使用slaveof
    2. 配置只讀 slave-read-only yes
    3. master添加密碼 masterauth &lt;master-password&gt;, requirepass &lt;your passwd&gt;
    4. a -> b -> c集羣,c仍然會和a的dataset保持一致
  • replication如何處理keys過期
    1. 不能總是依賴master往replica去同步時鐘來完成
    2. 具體實現方式如下
      • replicas不會讓keys過期,他們只等待master讓keys過期,如果master的某個key過期了,那就把DEL命令傳輸給replicas
      • 其他待學習
  • [TODO]docker中的replication網絡NAT[TODO]
  • [TODO]當master restart之後,可能其他replica已經成爲master了, 那麼之前沒傳完的數據該如何部分重傳?

    1.4 persistency

    <font color='red'>當redis實例啓動的時候,如果appendonly no, 則無論是否打開rdb,都會默認加載指定目錄下的dbfilename,如果appendonly yes, 則優先加載appendfilename, 如果appendfilename不存在,則不會加載dbfilename</font>

  • RDB
    默認redis會以快照方式,將redisDB保存在dump.rdb中
    觸發方式有三種
    1. save
    2. bgsave
    3. save &lt;sec&gt; &lt;num of keyschange&gt; save 60 10 每六十秒統計一次,如果有超過10個key發生變更,則觸發一次快照
    4. 如果使用save '',rdb會被關閉或者redis-cli config set save ''
  • AOF
    fsync的方式,最高提供命令級別的fsync策略,支持(有新命令,秒級別,從不)的fsync策略
    默認關閉
    appendonly yes // 打開aof
    appendfilename "appendonly.aof"
    appendfsync everysec(default)|always|no // fsync頻率
    AOF提供”BGREWRITEAOF“命令,重新生成一個新的AOF,其中包含更少的命令來創建當前數據集
    redis-check-aof –fix 提供aof文件corrupt情況下的文件修復
    aof工作原理[TODO]
  • aof和RDB
    BGSAVE和BGREWRITEAOF命令不能同時執行
    aof過大時,支持aof文件的重寫,用於達到複製相同複製集的情況下的,減小aof文件大小

  • diff
    當一個單實例模型重啓時
    rdb:DB loaded from disk: xxxx seconds
    aof: DB loaded from append only file: xxx seconds
    rdb+aof: DB loaded from append only file: 0.010 seconds
    • 當rdb+aof時,會產生兩個文件,一個aof文件,一個rdb文件
    • 重啓時,當rdb文件丟失,redis啓動之後,通過aof文件,仍然能夠恢復服務
    • 重啓時,當aof文件丟失,redis啓動之後,通過rdb文件,不能正常啓動(<font color='red'>這種情況如何修復?這個時候,需要將aof配置關閉,以單rdb方式打開,此時redis處於rdb狀態,需要重新使用config set appendonly yes打開aof纔可以迴歸正常</font>)

二、sentinel知識總結

爲redis instance的一種HA方案,同時提供monitor,notification(API觸發接口),auto failover 和 configration provider

2.1 有關sentinel集羣

  1. sentinel的啓動必須指定配置文件,配置文件只需指定監控master即可
  2. sentinel集羣的每個實力必須互通,默認26379端口
  3. sentinel集羣至少sentinel * 3
  4. (異步複製原因)sentinel + redis<font color='red'>不保證failover期間的write操作是被保留的</font>,【TODO】這裏要再繼續學習
  5. sentinel, docker, NAT, port mapping , 使用docker的端口映射,將會打斷sentinel的自動發現功能,也會影響master的對應的slave列表功能,【TODO】稍後查看相關sentinel with docker
  6. sentinel是依靠master的INFO信息來進行replica發現
  7. 有關sentinel master mymaster 這個信息裏面的flags, 正常情況下值爲master,也有可能出現s_down或者o_down, 分別表示對應Subjectively Down(主觀)和Objectively Down(客觀), 比如debug sleep 30和直接ctrl+c終止redis-server進程,都會觸發S_down, O_down暫時還沒去了解

2.2 sentinel啓動配置

  1. sentinel monitor &lt;master-group-name&gt; &lt;ip&gt; &lt;port&gt; &lt;quorum&gt;
    quorum解釋:

    • 集羣中至少有&lt;quorum&gt;個sentinel認爲master不可用,failover纔會被授權執行。
    • 這個failover又是誰來啓動呢?又是被誰授權呢?
      如果: sentinel集羣有5個sentinel: 且都配置sentinel monitor mymaster ip port 2
      那麼: 有兩個(至少)sentinel說master不可用了,這2箇中的其中一個sentinel就會發起failover初始化,然後,集羣中的5個sentinel如果至少有3個sentinel認爲該master不可用了,那麼這個failover就會被授權執行
    • 這麼多sentinel是怎樣標記那個故障master的狀態,並完成判斷的呢?
      答:sentinel集羣的每個sentinel都是有互相交流的,當集羣中的sentinel發現一個master不可用(通過down-after-milliseconds斷定)時,這個sentinel就會對這個master標記一個sdown狀態,當第二個sentinel也發現同樣情況時,也對master打一個sdown狀態,當這個sdown超過2的時候,sentinel集羣就會failover初始化,並獲取所有sentinel對master的評價進行投票,當這個集羣中總sdown的個數超過3時,sentinel集羣中的所有sentinel都會將這個master標記爲odown(客觀下線),然後由第一個收到odown通知的sentinel去執行failover。
    • 結論:
      sentinel集羣中的個數不能少於 quorum個,否則,此sentinel集羣已經失去failover的功能,而且能不能?正常對外提供服務
  2. sentinel &lt;option_name&gt; &lt;master_name&gt; &lt;option_value&gt;
    optionname如下:

    • down-after-milliseconds &lt;ms&gt;//超過這個時間,sentinel將認爲實例不可達
    • parallel-syncs &lt;nums&gt;//出現故障,failover完成後,最多有多少個replica去從master同步
    • failover-timeout &lt;ms&gt;// failover進程最長執行時間,超過時間將認定failover失敗<font color='red'>【TODO】這時集羣的狀態是ERROR嗎?</font>
  3. 樣例

    bind             <my_ip> 127.0.0.1
    protected-mode    no
    syslog-enabled    no
    syslog-ident      "redis-sentinel"
    syslog-facility   local0
    port              26379
    dir               /home/redis/data/conf
    maxclients        50000
    
    sentinel monitor redis_sentinel_zhk022702 <my_ip> 6379 2
    sentinel down-after-milliseconds redis_sentinel_zhk022702 20000
    sentinel parallel-syncs redis_sentinel_zhk022702 2

2.3 安全機制:

  1. redis實例本身的認證,

    • for replica的masterauth &lt;master-password&gt;,
    • for client的requirepass &lt;yourRequirePasswd&gt;
    • 如果redis集羣配置了上述兩個配置,那麼sentinel實例也必須配置sentinel auth-pass &lt;master-group-name&gt; &lt;pass&gt;sentinel auth-pass mymaster &lt;yourRequirePasswd&gt;
  2. sentinel認證
    • sentinel認證配置——sentinel在5.0版本之後也支持client到sentinel自己的認證,只需要在sentinel配置requirepass &lt;yourSentinelPasswd&gt;, 這個指令將直接限制client --> sentinel的訪問和sentinels集羣間的認證

2.4 sentinel集羣模型及其搭建步驟

# redis-server
# redis-server --port 6380
# redis-server --port 6381
# cat conf/sentinel*.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 40000
sentinel parallel-syncs mymaster 2
port 26380
...同上
port 26381
...同上
# redis-sentinel conf/sentinel1.conf
# redis-sentinel conf/sentinel2.conf
# redis-sentinel conf/sentinel3.conf
# cat conf/sentinel*.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2 #如果發生failover,本配置文件會被更改
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 40000
sentinel parallel-syncs mymaster 2
# Generated by CONFIG REWRITE
dir "/data"
sentinel config-epoch mymaster 0 ## 表示這兩個自動添加的內容不知道意思
sentinel leader-epoch mymaster 0
sentinel known-sentinel mymaster 127.0.0.1 26380 119690834a6925435edeeccf6a98df1152d342a5
sentinel known-sentinel mymaster 127.0.0.1 26381 c75d2e225a353d23881d63e5a383cc620f0c1d44
sentinel current-epoch 0
port 26380
...與上類似
port 26381
...與上類似

2.5 常用sentinel相關命令

redis-cli -p 26379
localhost:26379> sentinel master mymaster # 用於顯示 本sentinel所監控的master信息
SENTINEL slave mymaster # 查master的slaves
SENTINEL sentinels mymaster #查sentinel的其他sentinels
SENTINEL get-master-addr-by-name mymaster #獲取master的<ip:port>
SENTINEL failover <master name>
SENTINEL reset <pattern>
SENTINEL ckquorum <master name> 
SENTINEL flushconfig

# 實時重配置sentinel
SENTINEL MONITOR <name> <ip> <port> <quorum>
SENTINEL REMOVE <name>
SENTINEL SET <name> <option> <value> 

# 測試failover
redis-cli -p 6379 DEBUG sleep 30

# 安全相關

2.6 客戶端如何使用sentinel集羣

在這個例子中, ForClient: 三個 < sentinelIP: sentinelPORT >
https://redis.io/topics/sentinel-clients

三、主從版sentinel總結

  • sentinel集羣配置同sentinel
  • 對外服務,使用lbc --> masterIP:port, 暴露lbc vip:vport,
  • sentinel vs 主從版
    1. lbc
    2. sentinel集羣的sentinel和redis實例是在同一個主機內,也就是一個sentinel集羣服務一個reidis實例
    3. 主從版的sentinel集羣會監控多個redis實例,
    4. failover,當發生failover的時候,sentinel集羣不僅會負責切換,而且會負責調用lbc接口,讓lbc的realserver指向切換後新的master

四、cluster模式

4.1 What

  1. Automatically sharded data across multiple redis nodes
  2. Continue operations when a subset of nodes are failures

4.2 集羣實現及其特徵

  1. Redis cluster集羣,是一個自識別的過程,通過cluster enabled的方式,激活redis-server的啓動模式,再通過redis-cli —cluster模式,來讓他自己完成master -slave的識別和nodes的創建
  2. 兩個端口: 一個for client, 一個集羣內nodes間通信,失敗檢測,配置更新,failover授權等
  3. client端口可開白,可開黑,cluster bus port 必須集羣內互通
  4. redis cluster 和Docker(也是NAT環境問題[TODO])
  5. Cluster data sharding:沒有使用一致性哈希,而是給對應的KEY的CRC16校驗值給16384取模,比如一個三節點的cluster集羣,三個節點就有三個對應的哈希槽位【TODO,具體算法可後續查看】
  6. 【redis clusterCAP評估】: 雷同於mongod集羣,所有nodes作爲cluster sharding, 單個節點使用replication模型提供master-slave高可用保障, 有關Consistency一致性,redis cluster不支持特別強的一致性,因爲是異步複製,在一些情況下(如果client往Master上面寫,但是master上還沒有個其replica上告知數據write就掛了)

4.3 redis cluster配置, Jetis配置

  1. cluster-enabled &lt;yes/no&gt;
  2. cluster-config-file &lt;filename&gt; # 這個配置不是由用戶編輯,而是有集羣生成,當啓動時,cluster節點信息,狀態,變量信息等就會記錄在內
  3. cluster-node-timeout &lt;ms&gt; # 類似於sentinel的down-after-, master超過多少毫秒不可達, 將觸發改節點的主從切換
  4. cluster-slave-validity-factor &lt;factor&gt;[TODO 待學習]
  5. cluster-migration-barrier <count>[TODO 待學習]
  6. cluster-require-full-coverage &lt;yes/no&gt; 默認是yes,當一個key計算出的hash slot未被cluster集羣覆蓋時,該redis節點將不再提供查詢服務,這時候異常的節點將會導致集羣不可用,但是你又希望集羣的其他正常的節點能夠正常提供接受請求,這時候設置此項目爲no
  7. cluster-allow-reads-when-down <yes/no>[TODO 待學習]

4.4 集羣搭建

# redis.conf // 啓動redis cluster實例 * 6
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

port 7001-7005

或者這樣: ../../src/redis-server --port 30009 --cluster-enabled yes --cluster-config-file nodes-30009.conf --cluster-node-timeout 2000 --appendonly yes --appendfilename appendonly-30009.aof --dbfilename dump-30009.rdb --logfile 30009.log --daemonize yes
…

# redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
// 6個redis instance, 按照master:slave = 1:1  ==> 組成nodes * 3,並且三個nodes參與sharding,並分配好三個nodes的hash slot

# 執行完成後,redis會自動將master-slave劃分好,並提供對應關係

# > cluster nodes查看當前集羣狀態
# > cluster info查看集羣信息 
# > cluster failover做主從切換

4.5 集羣搭建2

create-cluster start
create-cluster create
create-cluster stop

# 集羣reshard
交互式:redis-cli --cluster reshard 127.0.0.1:30001 //如果不滿意redis劃分的shard落點,可以自行劃分 
腳本: redis-cli reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
狀態查看: redis-cli --cluster check 127.0.0.1:30001 // 用於查看reshard之後集羣的狀態是否正常

# 手動主從切換(failover)
在slave上執行 cluster failover

# 添加節點
redis-cli --cluster add-node <new_to_add> <existed_node>
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
//這樣添加的節點默認都是master節點,第一: 雖然是master節點,但是卻沒有對應的hashslots,二來,當其他slave想failover爲master時,這些無slots的master不參與選舉過程

# 添加replica
方法:1 這種類似上面,添加一個slave,但是默認將這個slave分配到master上對應slave較少的master上, 即便配置了master-slave1:1, 當有新的slave加入時,可能會變成1:2
redis-cli --cluster add-node <new_to_add> <existed_node> --cluster-slave
方法:2 直接指定對應的master
redis-cli --cluster add-node <new_to_add> <existed_node> --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
方法:3 鏈接到對應的節點,手動通過CLUSTER REPLICA
redis <new_to_add>> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

# 刪除replica 
主機:端口這個是集羣隨意一個即可,後面是要刪除的node_id
redis-cli --cluster del-node 127.0.0.1:7000 `<node-id>`
注意:replica可以直接刪除,但是如果要刪除master,必須要保證master節點上無數據(使用reshard,將該節點的數據全都遷移到其他節點)

# replica遷移(暫未具體學習)

# nodes升級(暫未具體學習)

# cluster集羣遷移(暫時未學習)

4.6 用戶接口

[
    {"host": "localhost", "port": "30001"},
    {"host": "localhost", "port": "30002"},
    {"host": "localhost", "port": "30003"},
    {"host": "localhost", "port": "30004"},
    {"host": "localhost", "port": "30005"},
    {"host": "localhost", "port": "30006"},
]

五、擴縮容

  1. 普通redis節點的擴縮容
    直接通過更改maxmemory即可,sentinel通過主從切換方式來解決本機mem上限問題
  2. redis+shard

    redis-cli --cluster add-node <new_to_add> <existed_node>  // 加master
    redis-cli --cluster add-node <new_to_add> <existed_node> --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e // 加對應replica
    redis-cli reshard <host>:<port> //後面參數可選[--cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes], host:port爲擴容前已存在的節點(existed_node)
    redis-cli --cluster check 127.0.0.1:30001 // 檢查reshard的結果是否有異常
    

七、備份&&恢復

  1. 無aof: 不提供備份恢復,唯一觸發方式爲客戶端自行觸發的rdb
  2. 半aof: 當半aof的集羣需要做數據恢復時,如果需要修復數據,只需要將replica上的修改後的aof文件轉移到master上啓動即可
  3. 全aof: 按需對aof進行修改,直接啓動集羣即可
  4. RDB:
    • 默認都不打開,只有當有需要遷移,或者主動備份時,纔會採用bgsave,或者redis-cli -h 10.160.167.5 -p 2004 –rdb mobile4_bak.rdb)的方式進行RDB備份
    • 前者不佔用大量網絡io,後者會佔用大量網絡IO
  5. 可以藉助外部工具協助恢復[待學習]https://github.com/alibaba/RedisShake
  6. 其他注意:
    • 當down機的redis實例需要從rdb文件中恢復時,如果appendonly yes時,此時workdir不能有對應的aof文件,redis實例啓動時的默認行爲就是從aof文件中加載

八、附錄

8.1. 附錄1(我司cluster模式配置樣例)

#common配置:
bind <my_ip>  127.0.0.1  // 綁定地址
daemonize no  // 非daemon模式運行(也是默認)
pidfile /home/redis/var/run/redis.pid  //當redis被啓動爲一個daemon的時候,需要一個pid文件
protected-mode no //保護模式:默認(yes),如果yes, 且沒有指定bind,而且沒有配置密碼,那麼本實例僅支持本地client接入,不支持remote client access
port 6379
tcp-backlog 511  // 在高QPS(requests-per-sec)環境中這個值會影響當前服務器能夠處理的tcp鏈接請求的速率(rate), 參考http://dwz.date/Rsd和官方配置文檔
timeout 0 // 客戶端閒置N秒後,自動關閉,(0 to disable)
tcp-keepalive 300 // tcp長鏈接相關
loglevel notice // 日誌通告級別
logfile "/home/redis/var/log/redis.log"  // log path
databases 16 // 實例最大db數, default DB0, select # 進行切換
save 900000000 1  // RDB trigger on disk save <secs> <changes>, 表示 sec秒內(也就是過了sec秒後),如果有超過changes個keys發生改變,就主動落地一次, 本例表示9xxxx秒後,如果有1個key發生變更,就刷一次rdb,當然這裏永遠不可能觸發,一般用bgsave執行, 他不會阻塞進程
stop-writes-on-bgsave-error yes // 如果rdb snapshots失敗了,或者最近一次bgsave也失敗了,redis默認會拒絕本實例的寫操作,本設置爲了警告用戶當前實例的persistent已經失敗了
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /home/redis/data/db // workdir
slave-serve-stale-data yes // 用於處理slave和master鏈接丟失,或者replication還是正常服務,如果yes(default) --> 那slave仍然會響應client的請求,但是數據可能是過期的,或者是空的(第一次sync from master), 如果no,client在給slave發命令時,會直接給client反饋“SYNC with master in progress”, 
slave-read-only yes 
repl-diskless-sync no   // replication的同步策略,無盤 or socket, 目前disk是實驗性能,建議no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no // 有關同步之後套接字的TCP_NODELAY的禁用, TODO, 暫時不瞭解
repl-backlog-size 64mb // 當slave與master斷開連接時的一個sync緩衝,積壓緩衝區的大小,體積越大,能夠容忍的disconnection時間越長
repl-timeout 600 // replication 超時定義,如果1. 站在repl角度,如果sync時bulk傳輸i/o超時,如果給masterping超過600s則認爲超時,站在master角度,如果repl響應超時600s,則認定爲超時  【TODO】這裏可以瞭解瞭解bulk transfer
slave-priority 100 // 5.0中叫 replica-priority, 整型數值,用於sentinel模式中,當master異常時,replica需要晉升時的優先度,值越小,優先級越高,0默認不被選擇,default 100
maxmemory 36gb // 內存管理: 當實例使用的內存數量超過時,將根據maxmemory-policy策略進行key的刪除
maxmemory-policy noeviction // 有很多策略,根據使用場景,sa自行設定,這裏默認不進行key的eviction,而是反饋writes error
maxclients 50000

## 備份相關
appendonly no  //fsync是否開啓,內存flush --> disk的性能 vs persistent
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no //暫未了解[TODO]
auto-aof-rewrite-percentage 100  //暫未了解[TODO]
auto-aof-rewrite-min-size 4gb   //暫未了解[TODO]
aof-load-truncated yes

lua-time-limit 5000

## reids-cluster
cluster-enabled yes
cluster-config-file /home/redis/data/conf/nodes.conf 
cluster-node-timeout 15000  ## 類似於sentinel的down-after- 每個nodes的master-slave探測時間爲多長時,會觸發主從切換
cluster-require-full-coverage no  ## 默認是yes,當一個key計算出的hash slot未被cluster集羣覆蓋時,該redis節點將不再提供查詢服務,這時候異常的節點將會導致集羣不可用,但是你又希望集羣的其他正常的節點能夠正常提供接受請求,這時候設置此項目爲no

slowlog-log-slower-than 100000
slowlog-max-len 128
latency-monitor-threshold 1000
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 512mb 256mb 60
hz 10
aof-rewrite-incremental-fsync yes
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章