Redis 5.0
Redis5.0版是Redis產品的重大版本發佈,咱們先看一下它的最新特色:node
- 新的流數據類型(Stream data type) https://redis.io/topics/streams-intro
- 新的 Redis 模塊 API:定時器、集羣和字典 API(Timers, Cluster and Dictionary APIs)
- RDB 增長 LFU 和 LRU 信息
- 集羣管理器從 Ruby (redis-trib.rb) 移植到了redis-cli 中的 C 語言代碼
- 新的有序集合(sorted set)命令:ZPOPMIN/MAX 和阻塞變體(blocking variants)
- 升級 Active defragmentation 至 v2 版本
- 加強 HyperLogLog 的實現
- 更好的內存統計報告
- 許多包含子命令的命令如今都有一個 HELP 子命令
- 客戶端頻繁鏈接和斷開鏈接時,性能表現更好
- 許多錯誤修復和其餘方面的改進
- 升級 Jemalloc 至 5.1 版本
- 引入 CLIENT UNBLOCK 和 CLIENT ID
- 新增 LOLWUT 命令 http://antirez.com/news/123
- 在不存在須要保持向後兼容性的地方,棄用 "slave" 術語
- 網絡層中的差別優化
- Lua 相關的改進
- 引入動態的 HZ(Dynamic HZ) 以平衡空閒 CPU 使用率和響應性
- 對 Redis 核心代碼進行了重構並在許多方面進行了改進
Redis Stream
Redis stream本質上是個時序數據結構,具備以下特色:redis
- 每條記錄是結構化、可擴展的對
- 每條記錄在日誌中有惟一標識,標識中包含了時間戳信息,單調遞增
- 能夠根據須要自動清理歷史記錄
- 保存在內存中,支持持久化
底層是修改版的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符合以下約束:
- 永不重複,能夠判斷當前連接是否斷鏈過
- 單調遞增,能夠判斷不一樣連接的接入順序
Client unblock:
當客戶端由於執行具備阻塞功能的命令(如BRPOP、XREAD或者WAIT)被阻塞時,該命令能夠經過其餘鏈接解除客戶端的阻塞
阿里雲Redis 5.0優點:
- 新增的stream數據結構,豐富的應用場景和想象空間
- 內核的改進和bugfix,使用更健壯
- 支持帳號體系,根據帳號用途賦予相應的權限,更加安全
- 審計日誌,記錄了讀寫操做、敏感操做(keys、flushall等)、慢日誌、管理類命令,供用戶查詢
- 大key分析,基於快照的完整內存分析,更準確,直接輸出內存消耗top排行的key
- 支持單機和集羣版的平滑遷移
本文做者:stools
原文連接
本文爲雲棲社區原創內容,未經容許不得轉載。