Redis 7.0 新功能新特性總覽

中介軟體小哥發表於2022-03-04

說明:本文根據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 前兩個預覽版中不止以上提到的內容,還有更多的新特性和新功能我們會在後續的部落格中繼續為大家介紹。

相關文章