1. 程式人生 > >Redis 5.0新功能介紹

Redis 5.0新功能介紹

Redis 5.0

Redis5.0版是Redis產品的重大版本釋出,我們先看一下它的最新特點:

  1. 新的流資料型別(Stream data type) https://redis.io/topics/streams-intro
  2. 新的 Redis 模組 API:定時器、叢集和字典 API(Timers, Cluster and Dictionary APIs)
  3. RDB 增加 LFU 和 LRU 資訊
  4. 叢集管理器從 Ruby (redis-trib.rb) 移植到了redis-cli 中的 C 語言程式碼
  5. 新的有序集合(sorted set)命令:ZPOPMIN/MAX 和阻塞變體(blocking variants)
  6. 升級 Active defragmentation 至 v2 版本
  7. 增強 HyperLogLog 的實現
  8. 更好的記憶體統計報告
  9. 許多包含子命令的命令現在都有一個 HELP 子命令
  10. 客戶端頻繁連線和斷開連線時,效能表現更好
  11. 許多錯誤修復和其他方面的改進
  12. 升級 Jemalloc 至 5.1 版本
  13. 引入 CLIENT UNBLOCK 和 CLIENT ID
  14. 新增 LOLWUT 命令 http://antirez.com/news/123
  15. 在不存在需要保持向後相容性的地方,棄用 "slave" 術語
  16. 網路層中的差異優化
  17. Lua 相關的改進
  18. 引入動態的 HZ(Dynamic HZ) 以平衡空閒 CPU 使用率和響應性
  19. 對 Redis 核心程式碼進行了重構並在許多方面進行了改進

Redis Stream

Redis stream本質上是個時序資料結構,具有如下特點:

  1. 每條記錄是結構化、可擴充套件的對
  2. 每條記錄在日誌中有唯一標識,標識中包含了時間戳資訊,單調遞增
  3. 可以根據需要自動清理歷史記錄
  4. 儲存在記憶體中,支援持久化

底層是修改版的radix tree,每個node儲存了一個listpack。listpack是一塊連續的記憶體block,用於序列化msg entry及相關元資訊,如msg ID,使用了多種編碼,用於節省記憶體,是ziplist的升級版。如果XADD每次新增的對中的field是一樣的,那麼field不會重複儲存。

記憶體友好,對於簡單的十幾~幾十位元組的msg,100MB記憶體可以儲存數百萬個。listpack在記憶體和disk上的儲存結構是一樣的,所以stream資料在做RDB時效率非常高,0.3s,500w entries。

Redis Stream使用演示

釋出訊息

讀取訊息

阻塞讀取

釋出新訊息

訊息返回

建立消費組

通過消費組讀取訊息

Redis Stream使用場景

可用作時通訊等,大資料分析,異地資料備份等

客戶端可以平滑擴充套件,提高處理能力

Zpop

Sorted Sets 增加了類似List的pop命令:
ZPOPMAX 命令用於移除並彈出有序集合中分值最大的 count 個元素
ZPOPMIN 命令用於移除並彈出有序集合中分值最小的 count 個元素
BZPOPMAX 和 BZPOPMIN 是上述兩個命令的阻塞變種.

CLIENT:

Client id返回當前連線的ID,每個ID符合如下約束:

  1. 永不重複,可以判斷當前連結是否斷鏈過
  2. 單調遞增,可以判斷不同連結的接入順序

Client unblock:
當客戶端因為執行具有阻塞功能的命令(如BRPOP、XREAD或者WAIT)被阻塞時,該命令可以通過其他連線解除客戶端的阻塞

阿里雲Redis 5.0優勢:

  1. 新增的stream資料結構,豐富的應用場景和想象空間
  2. 核心的改進和bugfix,使用更健壯
  3. 支援賬號體系,根據賬號用途賦予相應的許可權,更加安全
  4. 審計日誌,記錄了讀寫操作、敏感操作(keys、flushall等)、慢日誌、管理類命令,供使用者查詢
  5. 大key分析,基於快照的完整記憶體分析,更準確,直接輸出記憶體消耗top排行的key
  6. 支援單機和叢集版的平滑遷移

 



本文作者:stools

原文連結

本文為雲棲社群原創內容,未經