Redis管什麼都叫“key”,因爲是鍵值數據庫。
基礎數據結構
對應表
redis | 數據結構 | command | 常用 |
---|---|---|---|
string | string | @string | set |
list | 雙向鏈表 | @list | rpush |
字典HashMap | hash | @hash | hset |
set | set | @set | sadd |
zset | 跳錶,類似sortedset | @sorted_set | zadd |
bitmap | 位圖 | setbit |
筆記
位圖
位圖最大的優點就是節省內存。取值範圍最大是,即512MB。
127.0.0.1:6379> setbit max 4294967295 1
(integer) 0
(2.44s)
使用場景
- 活躍用戶統計
用戶id當索引,十億個用戶才一百多M。
Redis-cli
幫助命令
help @<category>
按種類展示命令原語.
@generic, @list, @set,
@sorted_set,
@hash, @pubsub, @transactions,
@connection, @server, @scripting, @hyperloglog
還可以直接查詢某個命令的幫助文檔如:help sadd
Pub/Sub測試
簡單的發佈訂閱
下面創建一個簡單的主題carevent
,通過redis-cli實現。
創建一個主題carevent
:
127.0.0.1:6379> publish carevent "GTR 5 is coming"
(integer) 0
監聽一個主題(新開一個終端):
127.0.0.1:6379> subscribe carevent
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "carevent"
3) (integer) 1
1) "message"
2) "carevent"
3) "GTR 5 is coming 4"
可以觀察到其基本的消息格式爲:
消息類型 | topic | 消息體 |
---|---|---|
subscribe | topic名 | 當前訂閱的主題數量 |
message | topic名 | 消息內容 |
unsubscribe | topic名 | 當前訂閱的主題數量 |
注意的一點是:
訂閱一個topic後,會從訂閱前最後一個消息開始(不包含最後一個消息),開始接收消息。
還有另一種格式,即按照topic名字進行模式匹配,訂閱匹配到的主題:
127.0.0.1:6379> psubscribe carevent*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "carevent*"
3) (integer) 1
1) "pmessage"
2) "carevent*"
3) "carevent2"
4) "hello"
Pipelining
參考:Using pipelining to speedup Redis queries
這個的使用場景是一次客戶端發送很多條命令。
一般情況下,用戶端發送一條命令要經過,發送命令->網絡延遲->排隊->處理->返回->網絡延遲->讀取執行結果,這裏耗費的時間稱爲RTT。多條命令發送類似批處理,可以減少系統調用和網絡通信的開銷。
過期鍵的回收
redis的回收是分成兩種模式,主動和被動,可以參考:EXPIRE key seconds。
主動方式
Redis維持着一個過期鍵組成的集合,會週期性的隨機抽取鍵,查看是否key是否過期,過期則會刪除其所佔的內存空間。如果過期鍵佔全部樣本超過25%,則會立即開始下個週期。
主從模式下
slave不會淘汰過期鍵,等待master節點的增量日誌。
被動方式
key被訪問,如果過期了,redis會將其內存空間刪除。