簡(jiǎn)述幾個(gè)我們對(duì)Redis 7開源社區(qū)所做的貢獻(xiàn)

Redis 7 已經(jīng)于2022年4月28號(hào)正式發(fā)布氧苍,其中包括了將近50個(gè)新的命令旁理,增加了許多新的特性妆偏,并且在整個(gè)Redis 6到Redis 7的開發(fā)過程中,我也對(duì)Redis 的開源社區(qū)貢獻(xiàn)了一些微薄的力量古拴。在這篇文章中箩帚,我來給大家介紹幾個(gè)自己親身參與的幾個(gè)Redis 7 功能,并希望能夠?yàn)镽edis 8做出更多的貢獻(xiàn)黄痪。

在這篇文章中紧帕,我將介紹以下的內(nèi)容:

  1.  在redis.conf 配置文件中新增加的參數(shù):cluster-port
    
  2.  在sentinel.conf配置文件中新增加的參數(shù):master-reboot-down-after-period
    
  3.  在sentinel中新增加的命令:sentinel debug
    
  4.  在集群中新增加的命令:cluster addslotsrange 和cluster delslotsrange
    
  5.  對(duì)info命令的增強(qiáng)
    
  6.  修復(fù)sentinel更新密碼的一個(gè)隱患
    
  7.  增加了client list 命令的顯示內(nèi)容
    

在redis.conf配置文件中增加了一個(gè)新的參數(shù)cluster-port 用于為處于集群模式下的節(jié)點(diǎn)使用

我們知道,當(dāng)一個(gè)節(jié)點(diǎn)處于集群模式中桅打,它至少需要有2個(gè)TCP連接端口是嗜,一個(gè)負(fù)責(zé)與客戶端進(jìn)行連接轻纪,我們通常叫做命令端口,例如6379叠纷;而另外一個(gè)TCP的連接端口刻帚,我們可以叫集群端口,是負(fù)責(zé)當(dāng)前節(jié)點(diǎn)與集群中其他節(jié)點(diǎn)進(jìn)行故障檢測(cè)涩嚣,配置更新等其他功能崇众,這個(gè)端口的數(shù)值在Redis 7之前都是命令端口+10000. 這種設(shè)置方式就完全限制的客戶端對(duì)集群端口的配置,如果當(dāng)前節(jié)點(diǎn)的這個(gè)端口值被其他服務(wù)所占用航厚,那么當(dāng)前節(jié)點(diǎn)就會(huì)啟動(dòng)失敗顷歌。
在Redis 7中,我們?cè)黾恿薱luster-port這個(gè)參數(shù)幔睬,可以允許客戶自己定義集群端口眯漩,給了客戶更大的自由度,使用格式是cluster-port 0麻顶。
如果客戶在配置文件中將這個(gè)端口設(shè)置為0赦抖,那么當(dāng)前節(jié)點(diǎn)的集群端口依然等于命令端口+10000;如果客戶將這個(gè)端口設(shè)置為大于0辅肾,那么當(dāng)前節(jié)點(diǎn)在啟動(dòng)時(shí)將會(huì)將集群端口設(shè)置為它的值队萤。

在sentinel.conf配置文件中新增加了一個(gè)參數(shù):master-reboot-down-after-period

它的正確使用格式是:SENTINEL master-reboot-down-after-period mymaster 0
下面來闡述一下增加這個(gè)參數(shù)的原因:
在增加這個(gè)參數(shù)之前,Sentinel節(jié)點(diǎn)是通過在sentinel.conf設(shè)置的down-after-milliseconds參數(shù)來向主節(jié)點(diǎn)矫钓,備節(jié)點(diǎn)和其他sentinel節(jié)點(diǎn)發(fā)送PING請(qǐng)求來確認(rèn)發(fā)送的目的節(jié)點(diǎn)是否正常工作要尔。在sentinel.conf或者用戶自定義的sentinel配置文件中,如果down-after-milliseconds的設(shè)置大于或者等于1000新娜,那么sentinel發(fā)送頻率是1秒赵辕,如果down-after-milliseconds的設(shè)置小于1000,那么sentinel節(jié)點(diǎn)發(fā)送PING請(qǐng)求的頻率是down-after-milliseconds值(毫秒數(shù))概龄。
但是當(dāng)主節(jié)點(diǎn)在非常短的時(shí)間內(nèi)發(fā)生了重啟还惠,例如0.01秒,那么sentinel節(jié)點(diǎn)會(huì)收到一個(gè)”reboot”信號(hào)旁钧。在引入?yún)?shù)Master-reboot-down-after-period之前吸重,sentinel是不會(huì)發(fā)生主備切換的,那么如果主節(jié)點(diǎn)有很大的數(shù)據(jù)要從RDB文件中讀取到內(nèi)存中歪今,這個(gè)時(shí)候主節(jié)點(diǎn)是處于LOADING狀態(tài),是不能接受外部數(shù)據(jù)響應(yīng)的颜矿,會(huì)導(dǎo)致客戶端認(rèn)為主節(jié)點(diǎn)unavailable.
在Redis 7中寄猩,如果用戶在sentinel的配置文件中將master-reboot-down-after-period設(shè)置為大于0的數(shù),那么當(dāng)sentinel檢測(cè)到第一次收到的“reboot”的時(shí)間與當(dāng)前時(shí)間間隔大于master-reboot-down-after-period的毫秒數(shù)骑疆,并且主節(jié)點(diǎn)依然處于LOADING狀態(tài)田篇,那么sentinel將開始進(jìn)入主備切換狀態(tài)替废。這樣就大大地降低了數(shù)據(jù)丟失和主節(jié)點(diǎn)處于Unavailable 的可能性。

在sentinel中新增加的命令:sentinel debug

為了方便Redis的開發(fā)人員對(duì)sentinel的部分參數(shù)進(jìn)行調(diào)試或者在寫測(cè)試用例的時(shí)候更改一些參數(shù)泊柬,在Redis 7的Sentinel的模式中椎镣,增加了一個(gè)新的命令:sentinel debug
當(dāng)用戶在客戶端只運(yùn)行sentinel debug命令時(shí)候,它會(huì)顯示當(dāng)前狀態(tài)下兽赁,在Redis的sentinel部分可以調(diào)試的13個(gè)參數(shù)的具體信息状答,例子如下:

127.0.0.1:26379> sentinel debug

  1. "INFO-PERIOD"
  2. "10000"
  3. "PING-PERIOD"
  4. "1000"
  5. "ASK-PERIOD"
  6. "1000"
  7. "PUBLISH-PERIOD"
  8. "2000"
  9. "DEFAULT-DOWN-AFTER"
  10. "30000"
  11. "DEFAULT-FAILOVER-TIMEOUT"
  12. "180000"
  13. "TILT-TRIGGER"
  14. "2000"
  15. "TILT-PERIOD"
  16. "30000"
  17. "SLAVE-RECONF-TIMEOUT"
  18. "10000"
  19. "MIN-LINK-RECONNECT-PERIOD"
  20. "15000"
  21. "ELECTION-TIMEOUT"
  22. "10000"
  23. "SCRIPT-MAX-RUNTIME"
  24. "60000"
  25. "SCRIPT-RETRY-DELAY"
  26. "30000"
    當(dāng)用戶想要更改一個(gè)或者多個(gè)參數(shù)的時(shí)候,可以運(yùn)行如下命令:
    Sentinel debug parameter value [parameter value…]
    正像上面的例子中信息一樣刀崖,通過這個(gè)命令惊科,用戶可以更改下面13個(gè)參數(shù)的信息:
    SENTINEL_INFO_PERIOD
    SENTINEL_PING_PERIOD
    SENTINEL_ASK_PERIOD
    SENTINEL_PUBLISH_PERIOD
    SENTINEL_DEFAULT_DOWN_AFTER
    SENTINEL_TILT_TRIGGER
    SENTINEL_TILT_PERIOD
    SENTINEL_SLAVE_RECONF_TIMEOUT
    SENTINEL_MIN_LINK_RECONNECT_PERIOD
    SENTINEL_ELECTION_TIMEOUT
    SENTINEL_SCRIPT_MAX_RUNTIME
    SENTINEL_SCRIPT_RETRY_DELAY
    SENTINEL_DEFAULT_FAILOVER_TIMEOUT

新增cluster addslotsrange 命令和cluster delslotsrange 命令

在Redis 7 之前,如果用戶想為集群(cluster) 中的一個(gè)節(jié)點(diǎn)增加一些槽或者從一個(gè)節(jié)點(diǎn)中刪除一些槽亮钦,那么唯一的選擇就是cluster addslots slot [slot…] 或者cluster delslots slot [slot…]馆截。這兩個(gè)命令的缺點(diǎn)在于如果用戶想要一次性操作大量連續(xù)的槽,那么需要輸入大量的參數(shù)蜂莉。例如下面的例子蜡娶,如果想要把1到5000 的槽值賦予一個(gè)節(jié)點(diǎn),那么用戶需要運(yùn)行如下的命令:
Cluster addslots 1 2 3 …… 4999 5000
在cluster addslots之后需要傳遞5000個(gè)參數(shù)
那么在新增的cluster addslotsrange命令中映穗,用戶只需要傳遞2個(gè)參數(shù):開始的槽值和結(jié)束的槽值翎蹈,例子如下:
cluster addslotsrange 1 5000.
同理,cluster delslotsrange命令也是對(duì)已有的cluster delslots進(jìn)行了增強(qiáng)男公,當(dāng)用戶想要?jiǎng)h除大量的連續(xù)槽值的時(shí)候荤堪,也只需要傳遞2個(gè)參數(shù)即可
這兩個(gè)新命令的具體格式如下:
CLUSTER DELSLOTSRANGE startslot endslot [startslot endslot...]
CLUSTER ADDSLOTSRANGE startslot endslot [startslot endslot...]
更加具體的使用和注意事項(xiàng),可以參考redis的鏈接:
https://redis.io/commands/cluster-addslotsrange/
https://redis.io/commands/cluster-delslotsrange/

對(duì)Info命令的增強(qiáng)

在客戶端中執(zhí)行info命令枢赔,在Redis 7中澄阳,info命令可以接受多于一個(gè)section的參數(shù),例如
INFO Server Replication
INFO CPU Memory
INFO default commandstats all
具體關(guān)于info命令的使用踏拜,可以參考鏈接:https://redis.io/commands/info/

修復(fù)sentinel更新密碼的一個(gè)隱患

增加了當(dāng)用戶在Sentinel的客戶端使用sentinel set mastername auth-pass newpassword 命令時(shí)的安全性
在Redis 7.0 之前的版本中碎赢,如果用戶在Sentinel的客戶端執(zhí)行如下命令時(shí):
127.0.0.1:17379> sentinel set mymaster auth-pass THIS_IS_PASSWORD
OK
在sentinel的服務(wù)器端,用戶會(huì)看到一個(gè)log:
22720:X 05 Oct 2021 12:43:16.248 # +set master mymaster 127.0.0.1 6379 auth-pass THIS_IS_PASSWORD
我們可以看到速梗,新設(shè)置的密碼被打印到客戶端或者可以被直接存儲(chǔ)到日志文件中肮塞,這個(gè)非常不安全的。在Redis 7中姻锁,這個(gè)問題被修復(fù)了枕赵。如果客戶執(zhí)行同樣的命令,那么客戶會(huì)看到類似下面的日志:
22720:X 05 Oct 2021 12:43:16.248 # +set master mymaster 127.0.0.1 6379 auth-pass ******

增加了client list命令的顯示內(nèi)容

用戶可以通過client list命令查看當(dāng)前的Redis支持的RESP協(xié)議的版本
RESP全稱是Redis serialization protocol. 客戶端可以通過RESP協(xié)議與Redis 服務(wù)器進(jìn)行溝通位隶。在最新的Redis 7版本中拷窜,客戶端可以通過調(diào)用client list這個(gè)命令查看當(dāng)前支持的RESP協(xié)議的版本,具體的例子如下:
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:48556 laddr=127.0.0.1:6379 fd=8 name= age=153 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22298 events=r cmd=client|list user=default redir=-1 resp=2
這篇文章就介紹到這里了,下一篇文章會(huì)介紹Redis 7新增的functions的幾個(gè)命令篮昧,謝謝大家赋荆!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市懊昨,隨后出現(xiàn)的幾起案子窄潭,更是在濱河造成了極大的恐慌,老刑警劉巖酵颁,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫉你,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡材义,警方通過查閱死者的電腦和手機(jī)均抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來其掂,“玉大人油挥,你說我怎么就攤上這事】畎荆” “怎么了深寥?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贤牛。 經(jīng)常有香客問我惋鹅,道長(zhǎng),這世上最難降的妖魔是什么殉簸? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任闰集,我火速辦了婚禮,結(jié)果婚禮上般卑,老公的妹妹穿的比我還像新娘武鲁。我一直安慰自己,他們只是感情好蝠检,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布沐鼠。 她就那樣靜靜地躺著,像睡著了一般叹谁。 火紅的嫁衣襯著肌膚如雪饲梭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天焰檩,我揣著相機(jī)與錄音憔涉,去河邊找鬼。 笑死锅尘,一個(gè)胖子當(dāng)著我的面吹牛监氢,可吹牛的內(nèi)容都是我干的布蔗。 我是一名探鬼主播藤违,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼浪腐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了顿乒?” 一聲冷哼從身側(cè)響起议街,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎璧榄,沒想到半個(gè)月后特漩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骨杂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年涂身,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓蚪。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛤售,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妒潭,到底是詐尸還是另有隱情悴能,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布雳灾,位于F島的核電站漠酿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谎亩。R本人自食惡果不足惜炒嘲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匈庭。 院中可真熱鬧夫凸,春花似錦、人聲如沸嚎花。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紊选。三九已至啼止,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兵罢,已是汗流浹背献烦。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卖词,地道東北人巩那。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓吏夯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親即横。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪生,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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