redis針對list操作

2021-09-30 16:54:54 字數 4516 閱讀 3247

redis的list型別其實就是乙個每個子元素都是string型別的雙向鍊錶。鍊錶的最大長度是(2的32次方)。我們可以通過push,pop操作從鍊錶的頭部或者尾部新增刪除元素。這使得list既可以用作棧,也可以用作佇列。

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

1、lpush

在key對應list的頭部新增字串元素:

127.0.0.1:6379> lpush testlist ryp

(integer) 1

127.0.0.1:6379> lpush testlist wcy

(integer) 2

127.0.0.1:6379> lrange testlist 0 1

1) "wcy"

2) "ryp"

127.0.0.1:6379> lrange testlist 0 2

1) "wcy"

2) "ryp"

127.0.0.1:6379> lrange testlist 1 2

1) "ryp"

127.0.0.1:6379>

2、rpush

在key對應list的尾部新增字串元素:

127.0.0.1:6379> rpush testlist rjc

(integer) 3

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ryp"

3) "rjc"

127.0.0.1:6379>

3、linsert

在key對應list的特定位置之前或之後新增字串元素:

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ryp"

3) "rjc"

127.0.0.1:6379> linsert testlist before ryp 'ren'

(integer) 4

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ren"

3) "ryp"

4) "rjc"

127.0.0.1:6379> linsert testlist after ryp ryp

(integer) 5

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ren"

3) "ryp"

4) "ryp"

5) "rjc"

4、lset

設定list中指定下標的元素值 正數表示從上往下,下標從0開始 負數表示從下往上,下標從-1開始

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ren"

3) "ryp"

4) "ryp"

5) "rjc"

127.0.0.1:6379> lset testlist 2 "renyp"

ok127.0.0.1:6379> lset testlist -1 rjcheng

ok127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "ren"

3) "renyp"

4) "ryp"

5) "rjcheng"

127.0.0.1:6379>

5、lrem

從key對應list中刪除count個和value相同的元素。

count>0時,按從上往下順序刪除

count>0時,按從下往上順序刪除

count=0時,全部刪除

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "wcy"

3) "wcy"

4) "ren"

5) "renyp"

6) "ryp"

7) "rjcheng"

127.0.0.1:6379> lrem testlist 1 wcy

(integer) 1

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "wcy"

3) "ren"

4) "renyp"

5) "ryp"

6) "rjcheng"

127.0.0.1:6379>

6、ltrim

保留指定key 的值範圍內的資料:

127.0.0.1:6379> lrange testlist 0 -1

1) "one"

2) "two"

3) "three"

4) "four"

127.0.0.1:6379> ltrim testlist 2 -1

ok127.0.0.1:6379> lrange testlist 0 -1

1) "three"

2) "four"

127.0.0.1:6379>

7、lpop

從list的頭部刪除元素,並返回刪除元素:

8、rpop

從list的尾部刪除元素,並返回刪除元素:

127.0.0.1:6379> lrange testlist 0 -1

1) "one"

2) "two"

3) "three"

4) "four"

127.0.0.1:6379> lpop testlist

"one"

127.0.0.1:6379> rpop testlist

"four"

127.0.0.1:6379>

9、rpoplpush

從第乙個list的尾部移除元素並新增到第二個list的頭部,最後返回被移除的元素值,整個操作是原子的.如果第乙個list是空或者不存在返回nil

127.0.0.1:6379> lrange testlist 0 -1

1) "two"

2) "three"

127.0.0.1:6379> lrange testlist1 0 -1

1) "yun"

127.0.0.1:6379> rpoplpush testlist testlist1

"three"

127.0.0.1:6379> rpoplpush testlist testlist1

"two"

127.0.0.1:6379> lrange testlist 0 -1

(empty list or set)

127.0.0.1:6379> lrange testlist1 0 -1

1) "two"

2) "three"

3) "yun"

127.0.0.1:6379>

10、lindex

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

127.0.0.1:6379> lrange testlist 0 -1

1) "wcy"

2) "wcy"

3) "ren"

4) "renyp"

5) "ryp"

6) "rjcheng"

127.0.0.1:6379> lindex testlist 3

"renyp"

127.0.0.1:6379>

11、llen

返回key對應list的長度:

127.0.0.1:6379> lrange testlist1 0 -1

1) "two"

2) "three"

3) "yun"

127.0.0.1:6379> llen testlist1

(integer) 3

127.0.0.1:6379>

Redis 列表List操作

list 就是在同乙個key value中儲存多個value值,是乙個雙向鍊錶 1.從左推入 乙個或者多個value lpush key value1 value2 value3.2.從右推入乙個或多個value rpush key value1 value2 value3.3.從左移除並返回val...

Redis操作List命令

lpush 將所有指定的值插入到 key 的列表的頭部,元素是從最左端到最右端的 乙個接乙個被插入到 list 的頭部 rpush 將所有指定的值插入到 key 的列表的尾部,元素是從最右端到最左端的 乙個接乙個被插入到 list 的尾部 lrange 返回儲存在 key 的列表裡指定範圍內的元素,...

redis 操作之List列表操作

redis list操作 reids redis 操作之list列表操作 list操作,redis中的list在在記憶體中按照乙個name對應乙個list來儲存。如圖 lpush name,values 列表新增值 在name對應的list中新增元素,每個新的元素都新增到列表的最左邊,往左新增值,也...