1. 程式人生 > >redis之lists類型及操作

redis之lists類型及操作

redis

lists類型及操作
list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的所有值等等,操作中key理解為鏈表的名字。
Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。鏈表的最大長度是(2的32次方)。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊列。
有意思的是list的pop操作還有阻塞版本的,當我們[lr]pop一個list對象時,如果list是空,或者不存在,會立即返回nil。但是阻塞版本的b[lr]pop可以則可以阻塞,當然可以加超時時間,超時後也會返回nil。為什麽要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實現一個工作隊列。執行任務的thread可以調用阻塞版本的pop去獲取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候工作線程可以立即返回,也可以避免輪詢帶來的延遲。

lpush
在key對應list的頭部添加字符串元素
如:lpush mylist “aaa” “bbb”
rpush
在key對應list的尾部添加字符串元素
linsert
在key對應list的特定位置之前或之後添加字符串元素
如:linsert mylist3 before "world" "there"
lset
設置list中指定下標的元素值(下標從0開始)
如:lset mylist4 0 "four"
lrem
從key對應list中刪除count個和value相同的元素。
count>0時,按從頭到尾的順序刪除;

count<0時,按從尾到頭的順序刪除;
count=0時,刪除全部
如:lrem mylist5 2 "hello"
ltrim
保留指定key 的值範圍內的數據
如:ltrim mylist8 1 -1
lpop
從list的頭部刪除元素,並返回刪除元素
如:lpop mylist
rpop
從list的尾部刪除元素,並返回刪除元素
rpoplpush
從第一個list的尾部移除元素並添加到第二個list的頭部,最後返回被移除的元素值,整個操作是原子的.如果第一個list是空或者不存在返回nil.
如:rpoplpush mylist5 mylist6
lindex
返回名稱為key的list中index位置的元素
llen
返回key對應list的長度

redis之lists類型及操作