redis5.0版是Redis產(chǎn)品的重大版本發(fā)布,我們先看一下它的最新特點:
新的流數(shù)據(jù)類型(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 的實現(xiàn)
更好的內(nèi)存統(tǒng)計報告
許多包含子命令的命令現(xiàn)在都有一個 HELP 子命令
客戶端頻繁連接和斷開連接時,性能表現(xiàn)更好
許多錯誤修復(fù)和其他方面的改進
升級 Jemalloc 至 5.1 版本
引入 CLIENT UNBLOCK 和 CLIENT ID
新增 LOLWUT 命令 http://antirez.com/news/123
在不存在需要保持向后兼容性的地方,棄用 "slave" 術(shù)語
網(wǎng)絡(luò)層中的差異優(yōu)化
Lua 相關(guān)的改進
引入動態(tài)的 HZ(Dynamic HZ) 以平衡空閑 CPU 使用率和響應(yīng)性
對 Redis 核心代碼進行了重構(gòu)并在許多方面進行了改進
Redis Stream
Redis stream本質(zhì)上是個時序數(shù)據(jù)結(jié)構(gòu),具有如下特點:
每條記錄是結(jié)構(gòu)化、可擴展的對
每條記錄在日志中有唯一標識,標識中包含了時間戳信息,單調(diào)遞增
可以根據(jù)需要自動清理歷史記錄
保存在內(nèi)存中,支持持久化
底層是修改版的radix tree,每個node存儲了一個listpack。listpack是一塊連續(xù)的內(nèi)存block,用于序列化msg entry及相關(guān)元信息,如msg ID,使用了多種編碼,用于節(jié)省內(nèi)存,是ziplist的升級版。如果XADD每次添加的對中的field是一樣的,那么field不會重復(fù)存儲。