Redis入門(二):五大類型 3:列表類型

介紹

  • 列表類型(list)能夠存儲一個有序的字符串列表,經常使用的操做是向列表兩端添加元素,或者得到列表的某一個片斷。
  • 列表類型的內部是雙向鏈表(double linked list)實現的,因此向列表兩端添加元素的時間複雜度爲O(1),獲取越接近兩端的元素速度就越快。一個列表類型最多能容納2^32-1個元素。

命令

1.向列表兩端增長元素redis

LPUSH key value [value ...]
RPUSH key value [value ...]

LPUSH 命令用來向列表左邊增長元素,返回值表示增長元素後列表的長度。數據庫

redis> LPUSH numbers 1
(integer) 1

此時numbers鍵中的數據爲:1

LPUSH 命令還支持同時增長多個元素。數組

redis> LPUSH numbers 2 3 
(integer) 3

此時numbers鍵中的數據爲:321

RPUSH 命令用來向列表右邊增長元素,用法與 LPUSH 同樣。code

redis> RPUSH numbers 0 -1
(integer) 5

此時numbers鍵中的數據爲:3 2 1 0 -1

2.從列表兩端彈出元素索引

LPOP key
RPOP key

LPOP 命令能夠從列表左邊彈出一個元素。LPOP 命令執行有兩步操做:第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值。字符串

redis> LPOP numbers
"3"

此時numbers鍵中的數據爲:2 1 0 -1

一樣,RPOP 命令能夠從列表右邊彈出一個元素。io

redis> RPOP numbers
"-1"

此時元素的數據爲:2 1 0

3.獲取列表中元素的個數入門

LLEN key

當鍵不存在時 LLEN 會返回 0。table

redis> LLEN numbers
(integer) 3

LLEN 命令的功能相似 SQL 語句SELECT COUNT(*) FROM table_name,可是LLEN的時間複雜度爲O(1),使用Redis  
會直接讀取現成的值,而不須要像部分關係數據庫那樣須要遍歷一遍數據表來統計條目數量。

4.得到列表片斷遍歷

LRANGE key start stop

LRANGE 命令將返回索引從 start 到 stop 之間的全部元素(包含兩端的元素)。Redis 的列表起始索引爲:0。

redis> LRANGE numbers 0 2
1) "2"
2) "1"
3) "0"

LRANGE 命令也支持索引,表示從右邊開始計算序數,如「-1」表示最右邊第一個元素,「-2」表示最右邊第二個元素,依此類推。

redis> LRANGE numbers -2 -1
1) "1"
2) "0"

顯然,LRANGE numbers 0 -1 能夠獲取列表中的全部元素。另一些特殊狀況以下。

  • 若是 start 的索引位置比 stop 的索引位置靠後,則會返回空列表。
  • 若是 stop 大於實際的索引範圍,則會返回到列表最右邊的元素。

5.刪除列表中指定的值

LREM key count value

LREM 命令會刪除列表中前count個值爲value的元素,返回值是實際刪除的元素個數。根據count值的不一樣,LREM命令的執行方式會略有差別。
(1)當 count > 0 時 LREM 命令會從列表左邊開始刪除前 count 個值爲 value 的元素。
(2)當 count > 0 時 LREM 命令會從列表右邊開始刪除前 count 個值爲 value 的元素。
(3)當 count > 0 時 LREM 命令會刪除全部值爲 value 的元素。

redis> RPUSH numbers 2
(integer) 4
redis> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
4) "2"

# 從右邊開始刪除第一個值爲「2」的元素
redis> LREM numbers -1 2
(integer) 1
redis> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"

6.得到/設置指定索引的元素值

LINDEX key index
LSET key index value

若是要將列表類型看成數組來使用,LINDEX命令是必不可少的。
LINDEX命令用來返回指定索引的元素,索引從0開始。

redis> LINDEX numbers 0
"2"

若是index是負數,則表示從右邊開始計算的索引,最右邊元素的索引是-1。

redis> LINDEX numbers -1
"0"

LSET 是另外一個經過索引操做列比的命令,它會將索引爲index的元素賦值爲value。

redis> LSET numbers 1 7
OK
redis> LINDEX numbers 1
"7"

7.只保留列表指定片斷

LTRIM key start end

LTRIM 命令能夠刪除指定索引範圍以外的全部元素,其指定列表範圍的方法和LRANGE命令相同。

LTRIM numbers 0 -1
1) "1"
2) "2"
3) "7"
4) "3"
"0"
redis> LTRIM numbers 1 2
OK
redis> LRANGE numbers 0 1
1) "2"
2) "7"

8.向列表中插入元素

LINSERTF key BEFORE|AFTER pivot value

LINSERT 命令首先會在列表中從左到右查找值爲 pivot 的元素,而後根據第二個參數是 BEFORE 仍是 AFTER 來決定將 value 插入到該元素的前面仍是後面。
LINSERT 命令的返回值是插入後列表的元素個數。

redis> LRANGE numbers  0 -1
1) "2"
2) "7"
3) "0"
redis> LINSERT numbers AFTER 7 3
(integer) 4
redis> LRANGE numbers 0 -1
1) "2"
2) "7"
3) "3"
4) "0"
redis> LINSERT numbers BEFORE 2 1
(integer) 5
redis> LRANGE numbers 0 -1
1) "1"
2) "2"
3) "7"
4) "3"
5) "0"

9.將元素從一個列表轉到另外一個列表

RPOPLPUSH source destination

先執行 RPOP 命令再執行 LPUSH 命令。 RPOPLPUSH 命令會先從 source 列表類型鍵的右邊彈出一個元素,而後將其加入到 destination 列表類型鍵的左邊,並返回這個元素的值,整個過程是原子的。

整理自《Redis 入門指南第二版》。

相關文章
相關標籤/搜索