列表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