Redis 5.0新功能介紹

Redis 5.0

Redis5.0版是Redis產品的重大版本發佈,咱們先看一下它的最新特色:node

  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本質上是個時序數據結構,具備以下特色:redis

  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

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索