說明:本文根據(jù)Redis 7 RC2 的release note 整理并翻譯
近日撮胧,Redis 開源社區(qū)發(fā)布了7.0的兩個(gè)預(yù)覽版训措。在這兩個(gè)預(yù)覽版中鳖宾,有很多Redis 7.0中新增加的特性篙梢,新增加的命令或已有命令的新加參數(shù)顷帖,一些性能上的優(yōu)化和提高,還有一些API的改變,并且修復(fù)了以前版本中的一些bug贬墩,下面讓我們具體來看一下這些方面的內(nèi)容榴嗅。
Redis 7.0 包括了以下一些重要的變化:
1. 將AOF文件的存儲(chǔ)方式改為在一個(gè)文件夾下存儲(chǔ)多個(gè)文件。
2. 將持久化文件RDB的版本升級(jí)為10陶舞,與之前的RDB文件版本不再兼容录肯。
3. 在讀取老的RDB文件格式的時(shí)候?qū)iplist轉(zhuǎn)換為listpack,這種轉(zhuǎn)換發(fā)生于兩種情況之下:從磁盤讀取文件或者從一個(gè)主節(jié)點(diǎn)進(jìn)行復(fù)制文件的時(shí)候吊说。
4. 在redis.conf配置文件中论咏,protected-mode 默認(rèn)更改為yes,只有當(dāng)你希望你的客戶端在沒有授權(quán)的情況下可以連接到Redis server的時(shí)候可以將protected-mode設(shè)置為no颁井。
5. 在ACL中厅贪,pub/sub channel默認(rèn)是被阻塞的。
6. 在從節(jié)點(diǎn)中雅宾,TTL的時(shí)間標(biāo)識(shí)的是絕對(duì)時(shí)間养涮,不再是相對(duì)時(shí)間,從而保證了過期數(shù)據(jù)被及時(shí)刪除眉抬。
7. 不再支持 gopher協(xié)議贯吓。
8. 當(dāng)在配置文件中設(shè)置replica-serve-stale-data=no, 當(dāng)主節(jié)點(diǎn)不再提供服務(wù)時(shí)蜀变,PING命令得不到返回值悄谐。
Redis 7.0 新特性其中的幾個(gè)例子:
1. RedisFunctions:一種新的方式用于Redis server端腳本,它不同于以前版本支持的Lua腳本库北, Redis Functions可支持持久化爬舰,可復(fù)制,并且在節(jié)點(diǎn)重啟之后可以直接從server端讀取寒瓦。 我們會(huì)在后續(xù)的博客中詳細(xì)介紹Redis Functions的使用情屹。 如果現(xiàn)在大家就想知道更多詳情,可以參考鏈接https://redis.io/topics/functions-intro
2. 集群支持顯示主機(jī)名杂腰,而不僅僅顯示ip地址垃你。
3. 使用多個(gè)AOF文件降低了AOF重寫期間的內(nèi)存使用。
4. 在Lua腳本中支持了Function的標(biāo)志喂很。
5. 在AOF文件中增加了數(shù)據(jù)更新時(shí)間點(diǎn)的標(biāo)識(shí)惜颇,使得用戶可以恢復(fù)某一時(shí)間點(diǎn)的數(shù)據(jù)。
6. Lua腳本支持RESP3 版本的并且可以通過redis.REDIS_VERSION, redis.REDIS_VERSION_NUM得到Redis的版本恤筛。
7. 增加了對(duì)stream consumer組滯后的追蹤和報(bào)告 官还。
8. 增加了API以便于可以在functions和Lua腳本中明確地查看ACL。
Redis 7.0 新增14個(gè)用戶端命令和 15個(gè)已有命令的相關(guān)參數(shù)選項(xiàng)毒坛,其中包括:ZMPOP, BZMPOP望伦,LMPOP, BLMPOP等新命令林说,對(duì)于EXPIRE和SET命令,新增了更多的命令參數(shù)選項(xiàng)屯伞。
例如腿箩,ZMPOP的格式如下: ZMPOP numkeys key [key ...] MIN|MAX [COUNT count],而BZMPOP是ZMPOP的阻塞版本劣摇。
下面是一個(gè)使用ZMPOP的例子:
redis> ZMPOP 1 notsuchkey MIN
(nil)
redis> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
redis> ZMPOP 1 myzset MIN
1) "myzset"
2) 1) 1) "one"
2) "1"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "three"
4) "3"
redis> ZMPOP 1 myzset MAX
1) "myzset"
2) 1) 1) "three"
2) "3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
Redis 7.0 新增10個(gè)管理和監(jiān)控相關(guān)的命令及其相關(guān)參數(shù)選項(xiàng)珠移,其中包括:COMMAND LIST,COMMAND INFO末融,CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE等钧惧。
Redis 7.0 新增配置選項(xiàng):
1. maxmemory-clients 可以限定所有客戶端使用的內(nèi)存總和的最大值。
2. cluster-port用戶可以自定義集群的綁定端口勾习。
3. 對(duì)于Config Set 和Get命令浓瞪,支持在一次調(diào)用過程中傳遞多個(gè)配置參數(shù)。例如巧婶,現(xiàn)在我們可以在執(zhí)行一次Config Set命令中更改多個(gè)參數(shù): config set maxmemory 10000001 maxmemory-clients 50% port 26381裸准。
4. 還有shutdown-timeout澜汤,latency-tracking靠欢,cluster-link-sendbuf-limit等相關(guān)配置選項(xiàng)放妈。
Redis 7.0 在以下方面有了明顯的性能提升:
1. 數(shù)據(jù)類型Hash,List湿右, Zset的底層數(shù)據(jù)結(jié)構(gòu)用listpack替換了ziplist
2. 列表(List)的數(shù)據(jù)類型可以存儲(chǔ)超過4GB的單個(gè)元素
3. 降低了copy-on-write期間的內(nèi)存使用
4. 在使用大量散列(Hash)或者有序集合(Zset)時(shí)節(jié)省了大量的內(nèi)存
5. 在集群模式下诅妹,節(jié)省了大量的內(nèi)存并且降低了系統(tǒng)整體的延遲時(shí)間
6. 在集群中,當(dāng)一個(gè)主節(jié)點(diǎn)重啟之后诅需,從節(jié)點(diǎn)不再需要做完全同步漾唉,只需要做部分同步即可
7. 當(dāng)Redis啟動(dòng)時(shí)荧库,總是建立一個(gè)AOF文件用于持久化
8. 降低了長期沒有響應(yīng)客戶(idle, stale client)的內(nèi)存使用
9. 降低了在客戶回復(fù)數(shù)據(jù)包中的對(duì)于寫的系統(tǒng)調(diào)用次數(shù)堰塌,也同時(shí)降低了TCP packet的數(shù)目
Radis 7.0 還對(duì)模塊(Module)的API進(jìn)行了部分修改如下:
1. 新增了對(duì)RESP3類型的應(yīng)答的API支持
2. 新增了在RM_Call對(duì)RESP3回復(fù)消息的解析的API支持
3. 增加了對(duì)ACL進(jìn)行驗(yàn)證的支持
4. 還增加API:RM_CreateSubcommand,RM_KeyExists分衫,RM_TrimStringAllocation场刑, RM_SetCommandInfo等
當(dāng)然,Redis 7.0 前兩個(gè)預(yù)覽版中不止以上提到的內(nèi)容蚪战,還有更多的新特性和新功能我們會(huì)在后續(xù)的博客中繼續(xù)為大家介紹牵现。