redis5.x新特性,Stream流資料型別使用簡單教程
事實上Redis的資料型別一直都是二進位制安全的,幾乎每一種資料型別都是可以用來儲存流的。那為什麼Redis 5.0要引用Stream資料型別呢? 具體如何使用?
Stream是什麼
在一般的程式設計概念裡,流是一種主要用於優化記憶體的資料型別,它不需要一次性把大量資料,比如說大檔案一次性讀取到記憶體再處理,可以邊讀取邊處理,這樣可以用少量記憶體就可以處理大檔案。
因此簡單地說,流是Redis一種新的資料結構,不需要讀取原有key的值,就可以在此key中新增新內容的資料型別。
Stream新增
Stream可以用更抽象的方式來記錄資料,比如說日誌。
Stream型別儲存的不是一個字串,而是多個鍵值對,比如:
XADD mystream * sensor-id 1234 temperature 19.8 > 1518951480106-0
代表往mystream新增新的資料 { "sensor-id": 1234, "temperature": 19.8 }, *代表伺服器端生成一個新的EntryID
1518951480106-0 是代表這組資料的EntryID值,可以理解為日誌中的行號。1518951480106是當前時間的毫秒值,0代表這一時侯的第幾個資料。可以用XLEN檢視總資料個數。
> XLEN mystream (integer) 1
也可以自己指定EntryID的值,如:
> XADD somestream 0-1 field value 0-1 > XADD somestream 0-2 foo bar 0-2
流是隻增不減的,所以如果entryid值比之前的小,則會報錯:
> XADD somestream 0-1 foo bar (error) ERR The ID specified in XADD is equal or smaller than the target stream top item
Stream查詢
可以用 XRANGE/XREVRANGE 來查詢,- + 代表查詢所有的。
> XRANGE mystream - + 1) 1) 1518951480106-0 2) 1) "sensor-id" 2) "1234" 3) "temperature" 4) "19.8" 2) 1) 1518951482479-0 2) 1) "sensor-id" 2) "9999" 3) "temperature" 4) "18.2"
可以指定EntryID的值範圍,可以理解為取某個時間段的日誌內容
> XRANGE mystream 1518951480106 1518951480107 1) 1) 1518951480106-0 2) 1) "sensor-id" 2) "1234" 3) "temperature" 4) "19.8"
可以只取前兩個
> XRANGE mystream - + COUNT 2 1) 1) 1519073278252-0 2) 1) "foo" 2) "value_1" 2) 1) 1519073279157-0 2) 1) "foo" 2) "value_2"
Redis流介紹ofollow,noindex" target="_blank" href="https://redis.io/topics/streams-intro">https://redis.io/topics/streams-intro
Redis 5.0的主要改進:
1.新的Stream資料型別。
2.新的Redis模組API:Timers and Cluster API。
3.RDB 現在可儲存 LFU 和 LRU 資訊
4.叢集管理器從Ruby(redis-trib.rb)遷移到C。`redis-cli —cluster help`瞭解更多。
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. 引入 Dynamic HZ 平衡CPU空閒時的使用率和響應性
19. 重構了Redis 核心程式碼,並進行多方面改進
詳情:https://raw.githubusercontent.com/antirez/redis/5.0/00-RELEASENOTES