目錄
1 lpush/rpush key value1 [value2] …… :添加數據
2 lrange key start stop :獲取範圍數據
3 lindex key index:獲取index索引位置上的值
6 blpop/brpop key [key……] timeout:阻塞的去獲取並移除數據
7 lrem key count value:從指定list中移除count個value
redis裏面的string對應的是每次存儲單條數據,hash雖然存放的數據量相比較多一些,但是如果數據量再進一步擴大,那麼hash就顯得捉襟見肘了。這時候list就在人們的歡呼聲中,登上了舞臺。
1 list類型
- 數據存儲需求:存儲多個數據,並對數據進入存儲的順序進行區分
- 需要的存儲結構:一個存儲空間保存多個數據,且通過數據可以體現進入順序
- list類型:保存多個數據,底層是用雙向鏈表的存儲結構實現的
知道這些就夠了,接下來看以下list類型的基本操作。
2 list類型的基本操作
1 lpush/rpush key value1 [value2] …… :添加數據
從左邊或者右邊向list中插入數據。
可以看出我們先從左邊放入一個huawei,再從左邊放入一個apple,然後繼續向左邊放入一個microsoft,因此打印的順序是從左到右,即:microsoft,apple,huawei.
可以自行測試rpush和rpush、lpush的聯合使用。
2 lrange key start stop :獲取範圍數據
我們可以金桔list裏面的索引來獲取數據,其中第一個數據的下標爲0,和數組的編號方式一樣,但是不同的是,在list中最後一個元素的索引爲-1,倒數第二個元素的編號爲-2,因此在list中每個元素有兩個索引,從左到右從0開始編號,從右往左從-1開始編號。測試如下圖:
其實redis裏面的操作還是很簡單,非常容易理解的,如果你有編程基礎的話。
3 lindex key index:獲取index索引位置上的值
4 llen key:獲取list中值的個數
5 lpop/rpop key:獲取並移除數據
list中最牛X的操作就是lpush/rpush配合lpop/rpop 來使用。
6 blpop/brpop key [key……] timeout:阻塞的去獲取並移除數據
b:block,阻塞的意思,這麼命令的意思我簡單解釋以下:
從若干個list中去取數據,如果現在不存在,我可以等待timeout秒,如果在timeout秒內list中有數據了,就取出來,如果超過這個時間就自動執行完畢。
爲了實現這這效果我們來開啓兩個redis cli,看下圖:
在上圖中,我們先執行blpop list0 5,由於list0一直爲空,所以會超時,取出nil,然後執行blpop list0 10,在10秒的這個時間段內,我們從另一個redis cli 中向list0中插入數據 1,可以看到,執行blpop list0 10的redis cli已經成功的取到數據1。
7 lrem key count value:從指定list中移除count個value
首先因爲list裏面是允許值重複的,因此可能存在相同的幾個value。上述的lpop和rpop只能從兩邊移除元素,lrem可以根據元素的值將元素移除。
如上圖,001中有a b c d四個元素各一個,我們先用lrem 001 2 a移除a的時候,count爲2,但是001中只有一個a,因此只能去除掉一個a.
在list中,如果刪除中間的元素之後,後面的元素會自動向前追加,索引位置改變。
3 list類型的注意事項
- list中保存的類型都是string的,數據總量有上限2的32次方減1.
- list具有索引的概念
- 獲取全部數據操作結束索引設置爲-1
- list可以對數據進行分頁操作,通常第一頁信息來自於list,第二頁及更多信息通過數據庫的形式加載
4 list業務場景
1 朋友圈點贊,要求按照點贊順序現實點贊好友的信息
這種場景如下圖所示:
我們可以完整的將這個模型用list實現,發朋友圈的人用key表示,點讚的人爲value,點贊操作對應rpush,取消點贊操作可以對應lrem。評論信息可以通過list去查詢關係型數據庫。