Redis Test


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

筆記

位圖

位圖最大的優點就是節省內存。取值範圍最大是2322^{32},即512MB。

127.0.0.1:6379> setbit max 4294967295 1
(integer) 0
(2.44s)
使用場景
  1. 活躍用戶統計
    用戶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會將其內存空間刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章