Redis 7.0 首個 RC 版已釋出了一段時間。新版本包含多個面向使用者的新功能、顯著的效能優化和許多其他改進。與此同時還引入了可能會破壞相容性的變更,因此使用者在升級時需要確認是否受影響。
需要特別注意以下變更:
- Redis 7 將 AOF 作為多個檔案儲存在一個資料夾中
- Redis 7 為 RDB 檔案應用了新版本 (version 10) 格式,與舊版本不相容
- Redis 7 在載入較舊的 RDB 格式時會動態地將 ziplist 編碼的 key 轉換為 listpacks。此過程通常發生在從 RDB 載入檔案或者主從複製之間,且會增載入入時間
新特性
- Redis Functions:使用伺服器指令碼擴充套件 Redis 的新方法 ()
see - ACL:細粒度的基於 key 的許可權控制,通過 selectors 支援多種許可權規則 ()
see and - Cluster:支援用於分片(特定節點)的釋出/訂閱功能 ()
see - 在大多數情況下對子命令提供一流處理,這可能會對 ACL 類別、INFO 命令統計等造成影響 (, )
- 命令後設資料和檔案更新 ()
檢視 , - Command key-specs:為 client 定位 key 引數和 read/write purpose 提供更好的方法
(, , )
see - 使用 Multi-Part AOF 機制避免 AOF 的重寫開銷 ()
- Cluster:支援主機名,不再是此前的僅支援 IP 地址 ()
- 優化網路緩衝區的記憶體開銷管理,以及增加當總記憶體超過限制時刪除使用者端的選項 ()
- Cluster:增加斷開叢集匯流排連線的機制,以防止緩衝區不受控制的增長 ()
- AOF:增加時間戳註解和對基於時間點恢復的支援 ()
- Lua:支援 EVAL 指令碼中的 Function flags ()
see - Lua:RESP3 協定響應 Verbatim 和 Big-Number 型別 ()
- Lua:可通過 redis.REDIS_VERSION, redis.REDIS_VERSION_NUM 命令獲取 Redis 版本 ()
效能和資源利用改進
- 叢集模式下顯著優化延遲並降低記憶體開銷 ()
- 在具有很多 zset 或 hash key 的場景時降低記憶體開銷 ()
- 複製積壓緩衝區和主從複製緩衝區使用一個全域性共用的緩衝區 ()
- 減少 copy-on-write 的記憶體開銷 ()
- 釋放叢集傳送緩衝區中未使用的容量 ()
-
優化記憶體效率,充分利用使用者端結構記憶體用於回覆緩衝區 ()
- 在 Hash, List, Zset 中將 ziplist 替換為 listpack (, , )
- 新增對 list 型別的支援以儲存大於 4GB 的元素 ()
- 為臨時使用者端物件新增了一個池,以便在模組操作中重複使用 ()
- 移除命令引數計數限制,動態增長 argv 緩衝區 ()
- 優化 list 操作,從更靠近元素的一側開始查詢 ()
- 改進 fsync 以避免大量寫入磁碟 ()
- BITSET 和 BITFIELD SET 僅在值實際更改時傳播 ()
- 降低使用者端被模組解鎖阻塞時的延時 ()
。