Redis 5.0新功能介紹
阿新 • • 發佈:2019-05-03
Redis 5.0
Redis5.0版是Redis產品的重大版本釋出,我們先看一下它的最新特點:
- 新的流資料型別(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本質上是個時序資料結構,具有如下特點:
- 每條記錄是結構化、可擴充套件的對
- 每條記錄在日誌中有唯一標識,標識中包含了時間戳資訊,單調遞增
- 可以根據需要自動清理歷史記錄
- 儲存在記憶體中,支援持久化
底層是修改版的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
本文為雲棲社群原創內容,未經