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不會重復存儲。
