Redis 7.0 新功能新特性總覽

說明:本文根據Redis 7 RC2 的release note 整理並翻譯

 

近日,Redis 開源社區發佈了7.0的兩個預覽版。在這兩個預覽版中,有很多Redis 7.0中新增加的特性,新增加的命令或已有命令的新加參數,一些性能上的優化和提高,還有一些API的改變,並且修復了以前版本中的一些bug,下面讓我們具體來看一下這些方面的內容。

 

Redis 7.0 包括了以下一些重要的變化:

1. 將AOF文件的存儲方式改爲在一個文件夾下存儲多個文件。

2. 將持久化文件RDB的版本升級爲10,與之前的RDB文件版本不再兼容。

3. 在讀取老的RDB文件格式的時候將ziplist轉換爲listpack,這種轉換髮生於兩種情況之下:從磁盤讀取文件或者從一個主節點進行復制文件的時候。

4. 在redis.conf配置文件中,protected-mode 默認更改爲yes,只有當你希望你的客戶端在沒有授權的情況下可以連接到Redis server的時候可以將protected-mode設置爲no。

5. 在ACL中,pub/sub channel默認是被阻塞的。

6. 在從節點中,TTL的時間標識的是絕對時間,不再是相對時間,從而保證了過期數據被及時刪除。

7. 不再支持 gopher協議。

8. 當在配置文件中設置replica-serve-stale-data=no, 當主節點不再提供服務時,PING命令得不到返回值。

 

Redis 7.0 新特性其中的幾個例子:

1. RedisFunctions:一種新的方式用於Redis server端腳本,它不同於以前版本支持的Lua腳本, Redis Functions可支持持久化,可複製,並且在節點重啓之後可以直接從server端讀取。 我們會在後續的博客中詳細介紹Redis Functions的使用。 如果現在大家就想知道更多詳情,可以參考鏈接

2. 集羣支持顯示主機名,而不僅僅顯示ip地址。

3. 使用多個AOF文件降低了AOF重寫期間的內存使用。

4. 在Lua腳本中支持了Function的標誌。

5. 在AOF文件中增加了數據更新時間點的標識,使得用戶可以恢復某一時間點的數據。

6. Lua腳本支持RESP3 版本的並且可以通過redis.REDIS_VERSION, redis.REDIS_VERSION_NUM得到Redis的版本。

7. 增加了對stream consumer組滯後的追蹤和報告 。

8. 增加了API以便於可以在functions和Lua腳本中明確地查看ACL。

 

Redis 7.0 新增14個用戶端命令和 15個已有命令的相關參數選項,其中包括:ZMPOP, BZMPOP,LMPOP, BLMPOP等新命令,對於EXPIRE和SET命令,新增了更多的命令參數選項。

例如,ZMPOP的格式如下: ZMPOP numkeys key [key ...] MIN|MAX [COUNT count],而BZMPOP是ZMPOP的阻塞版本。

 

下面是一個使用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個管理和監控相關的命令及其相關參數選項,其中包括:COMMAND LIST,COMMAND INFO,CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE等。

 

Redis 7.0 新增配置選項:

1. maxmemory-clients 可以限定所有客戶端使用的內存總和的最大值。

2. cluster-port用戶可以自定義集羣的綁定端口。

3. 對於Config Set 和Get命令,支持在一次調用過程中傳遞多個配置參數。例如,現在我們可以在執行一次Config Set命令中更改多個參數: config set maxmemory 10000001 maxmemory-clients 50% port 26381。

4. 還有shutdown-timeout,latency-tracking,cluster-link-sendbuf-limit等相關配置選項。

Redis 7.0 在以下方面有了明顯的性能提升:

1. 數據類型Hash,List, Zset的底層數據結構用listpack替換了ziplist

2. 列表(List)的數據類型可以存儲超過4GB的單個元素

3. 降低了copy-on-write期間的內存使用

4. 在使用大量散列(Hash)或者有序集合(Zset)時節省了大量的內存

5. 在集羣模式下,節省了大量的內存並且降低了系統整體的延遲時間

6. 在集羣中,當一個主節點重啓之後,從節點不再需要做完全同步,只需要做部分同步即可

7. 當Redis啓動時,總是建立一個AOF文件用於持久化

8. 降低了長期沒有響應客戶(idle, stale client)的內存使用

9. 降低了在客戶回覆數據包中的對於寫的系統調用次數,也同時降低了TCP packet的數目

 

Radis 7.0 還對模塊(Module)的API進行了部分修改如下:

1. 新增了對RESP3類型的應答的API支持

2. 新增了在RM_Call對RESP3回覆消息的解析的API支持

3. 增加了對ACL進行驗證的支持

4. 還增加API:RM_CreateSubcommand,RM_KeyExists,RM_TrimStringAllocation, RM_SetCommandInfo等

 

當然,Redis 7.0 前兩個預覽版中不止以上提到的內容,還有更多的新特性和新功能我們會在後續的博客中繼續爲大家介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章