天天看點

Redis實戰(5)資料類型三Lists

list是一個連結清單結構,主要功能是push、pop、擷取一個範圍的所有值等等,操作中key了解為連結清單的名字。

Redis的list類型其實就是一個每個子元素都是string類型的雙向連結清單。連結清單的最大長度是(2的32次方)。我們可以通過push,pop操作從連結清單的頭部或者尾部添加删除元素。這使得list既可以用作棧,也可以用作隊列。

有意思的是list的pop操作還有阻塞版本的,當我們[lr]pop一個list對象時,如果list是空,或者不存在,會立即傳回nil。但是阻塞版本的[lr]pop則可以阻塞,當然可以加逾時時間,逾時後也會傳回nil。為什麼要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實作一個工作隊列。執行任務的thread可以調用阻塞版本的pop去擷取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候工作線程可以立即傳回,也可以避免輪詢帶來的延遲。說了這麼多,接下來看一下實際操作的方法吧:

lpush:

在key對應list的頭部添加字元串元素

<a href="http://blog.51cto.com/attachment/201312/211603186.png" target="_blank"></a>

在此處我們先插入了一個world,然後在world的頭部插入了一個hello。其中lrange是用于取mylist的内容。

rpush:

在key對應list的尾部添加字元串元素

<a href="http://blog.51cto.com/attachment/201312/211926800.png" target="_blank"></a>

在此處我們先插入了一個hello,然後在hello的尾部插入了一個world。

linsert:

在key對應list的特定位置之前或之後添加字元串元素

<a href="http://blog.51cto.com/attachment/201312/212523508.png" target="_blank"></a>

在此處我們先插入了一個hello,然後在hello的尾部插入了一個world,然後又在world的前面插入了there。

lset:

設定list中指定下标的元素值(下标從0開始)

<a href="http://blog.51cto.com/attachment/201312/212911242.png" target="_blank"></a>

在此處我們依次插入了one,two,three,然後将标是0的值設定為four,再将下标是-2的值設定為five。

lrem:

從key對應list中删除count個和value相同的元素。 count&gt;0時,按從頭到尾的順序删除,具體如下:

<a href="http://blog.51cto.com/attachment/201312/213208707.png" target="_blank"></a>

count&lt;0時,按從尾到頭的順序删除,具體如下:

<a href="http://blog.51cto.com/attachment/201312/213402523.png" target="_blank"></a>

count=0時,删除全部,具體如下:

<a href="http://blog.51cto.com/attachment/201312/213720201.png" target="_blank"></a>

ltrim:

保留指定key 的值範圍内的資料

<a href="http://blog.51cto.com/attachment/201312/214023494.png" target="_blank"></a>

lpop:

從list的頭部删除元素,并傳回删除元素

<a href="http://blog.51cto.com/attachment/201312/214147804.png" target="_blank"></a>

rpop:

從list的尾部删除元素,并傳回删除元素

<a href="http://blog.51cto.com/attachment/201312/214339295.png" target="_blank"></a>

rpoplpush:

從第一個list的尾部移除元素并添加到第二個list的頭部,最後傳回被移除的元素值,整個操作是原子的.如果第一個list是空或者不存在傳回nil

<a href="http://blog.51cto.com/attachment/201312/214654348.png" target="_blank"></a>

lindex:

傳回名稱為key的list中index位置的元素

<a href="http://blog.51cto.com/attachment/201312/214845480.png" target="_blank"></a>

llen:

傳回key對應list的長度

<a href="http://blog.51cto.com/attachment/201312/214934497.png" target="_blank"></a>

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1337860,如需轉載請自行聯系原作者

繼續閱讀