Redis之4———list類型詳解:常用操作、業務場景

目錄

1 list類型

2 list類型的基本操作

1 lpush/rpush key value1 [value2] …… :添加數據

2 lrange key start stop :獲取範圍數據

3 lindex key index:獲取index索引位置上的值

4 llen key:獲取list中值的個數

5 lpop/rpop key:獲取並移除數據

6 blpop/brpop key [key……] timeout:阻塞的去獲取並移除數據

7 lrem key count value:從指定list中移除count個value

3 list類型的注意事項

4 list業務場景

1 朋友圈點贊,要求按照點贊順序現實點贊好友的信息

2 在一般要求順序的業務中,一般都用list來實現。


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去查詢關係型數據庫。

2 在一般要求順序的業務中,一般都用list來實現。

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