1. 程式人生 > 資料庫 >【redis資料結構 – lists】

【redis資料結構 – lists】

redis的另一個重要的資料結構叫做lists,翻譯成中文叫做“列表”。

首先要明確一點,redis中的lists在底層實現上並不是陣列,而是連結串列,也就是說對於一個具有上百萬個元素的lists來說,在頭部和尾部插入一個新元素,其時間複雜度是常數級別的,比如用LPUSH在10個元素的lists頭部插入新元素,和在上千萬元素的lists頭部插入新元素的速度應該是相同的。

雖然lists有這樣的優勢,但同樣有其弊端,那就是,連結串列型lists的元素定位會比較慢,而陣列型lists的元素定位就會快得多。

lists的常用操作包括LPUSH、RPUSH、LRANGE等。我們可以用LPUSH在lists的左側插入一個新元素,用RPUSH在lists的右側插入一個新元素,用LRANGE命令從lists中指定一個範圍來提取元素。我們來看幾個例子:

程式碼如下:

//新建一個list叫做mylist,並在列表頭部插入元素"1"
127.0.0.1:6379> lpush mylist "1"
//返回當前mylist中的元素個數
(integer) 1
//在mylist右側插入元素"2"
127.0.0.1:6379> rpush mylist "2"
(integer) 2
//在mylist左側插入元素"0"
127.0.0.1:6379> lpush mylist "0"
(integer) 3
//列出mylist中從編號0到編號1的元素
127.0.0.1:6379> lrange mylist 0 1

  1. "0"
  2. "1"
    //列出mylist中從編號0到倒數第一個元素
    127.0.0.1:6379> lrange mylist 0 -1
  3. "0"
  4. "1"
  5. "2"
    lists的應用相當廣泛,隨便舉幾個例子:

1.我們可以利用lists來實現一個訊息佇列,而且可以確保先後順序,不必像MySQL那樣還需要通過ORDER BY來進行排序。
2.利用LRANGE還可以很方便的實現分頁的功能。
3.在部落格系統中,每片博文的評論也可以存入一個單獨的list中。