Redis學習3--列表鍵List

列表list


一個列表可以包含一個或多個數量的項item。每個項按照他們被push到列表的位置來排列

每個列表項所在的位置決定了這個像的索引值index,索引從0開始,從列表的左端到右端一次遞增,

位於列表最左端表頭位置的項的索引爲0,而位於列表最右端表尾的索引爲N-1,N爲列表的長度。

列表包含的項可以出現重複,不必唯一。


從列表的左端push


將一個或以上數量值依次推入列表左端,返回被推入的值個數



兩個效果等同


rpush從右邊推入list

LPOP lst 

RPOP lst

從list中推出

lindex list 1

返回給定的索引上的項


LRANGE key start end 



示例:使用列表實現用戶時間線

列表中的每個項包含一個消息id,通過這個id可以查找到消息本身


更新時間線



獲取消息



列表的操作


設置制定索引上的列表項


LINSERT key BEFORE|AFTER pivot value

根據命令調用時傳遞的是BEFORE選項還是AFTER選項,將值value插入到制定列表項pivot的之前或者之後。

當pivot不存在與列表key時,不執行任何操作。

返回-1表示pivot不存在;返回0表示鍵key不存在,插入成功時則返回列表當前的長度



從列表中刪除指定的值



LREM示例:



修剪列表


LTRIM key start stop

對一個列表進行修剪trim,讓列表只保留指定索引範圍內的列表選項,而將不在範圍內的其他列表項全部刪除。

兩個索引都可以是正數或者負數。


示例:實現LLOOGG.com的機率存儲功能



定長先進先出隊列


定長先進先出隊列的API機器實現






阻塞彈出命令



非阻塞

如果只要發現給定的列表中至少一個非空列表時,BLPOP或者BRPOP就會立即從那個列表中彈出元素在這種情況下

BLPOP就像接受多個參數的LPOP命令,而BRPOP就像是一個接受多參數的RPOP命令

阻塞並超時

如果都是空列表將會阻塞,並在超時時間後返回。

如果在被阻塞的過程中客戶端項列表中推送新項,那麼服務器將這個新項自動返回給客戶端

BLPOP、BRPOP執行先到先服務的原則

比如如果lst列表爲空,客戶端x執行命令BLPOP lst timeout,之後客戶端Y也同樣執行BLPOP lst timeout 兩者都會被阻塞

如果還未timeout時,客戶端Z執行RPUSH lst “hello”,將值推送到lst列表中,會返回給客戶端X而不是Y,因爲x的被阻塞時間早於Y




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