1. 程式人生 > >Redis系列-儲存篇list主要操作函式小結

Redis系列-儲存篇list主要操作函式小結

在總結list之前,先要弄明白幾個跟list相關的概念:

列表:一個從左到右的佇列,個人理解更類似於一個棧,常規模式下,先進列表的元素,後出。

表頭元素:列表最左端第一個元素。

表尾元素:列表最右端的最後一個元素。不包含任何元素的列表成為空列表。

1)新增

a)lpush

語法:lpush key value[value]

解釋:把一個或多個元素插入表頭。如果是多個value時,按照從左到右的次序插。返回插入元素的個數

[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> lpush lst.user zhangsan   #插入一個元素
(integer) 1
redis 127.0.0.1:6379> lpush lst.user zhangsan lisi   #插入多個元素,list中允許插入重複的元素
(integer) 3

b)lpushx

語法:lpushx key value

解釋:插入一個表頭元素,當且僅當列表key存在時,才能插入。返回列表中元素的個數

redis 127.0.0.1:6379> lpushx lst.user wangwu   #列表存在
(integer) 4
redis 127.0.0.1:6379> lpushx lst.tech wangwu   #列表不存在,不插入
(integer) 0
c)rpush

語法:rpush key [value]

解釋:將一個或多個值插入到佇列的隊尾。多值時,從左到右依次新增。返回列表中元素個數

redis 127.0.0.1:6379> rpush lst.user ls005     #列表存在
(integer) 5
redis 127.0.0.1:6379> rpush lst.tech tec01 tec02 tec03  #列表不存在
(integer) 3
d) rpushx

語法:rpushx key value

解釋:講值插入到列表隊尾,當且僅當列表key存在時,才新增。返回列表元素個數

redis 127.0.0.1:6379> rpushx lst.tech tec04  #key 存在
(integer) 4
redis 127.0.0.1:6379> rpushx lst.sub englist #key 不存在
(integer) 0
e)linsert

語法:linsert key before|after pivot value

解釋:將值插入到pivot的前面或後面。返回列表元素個數。如果參照點pivot不存在不插入。如果有多個pivot,以離表頭最近的為準

redis 127.0.0.1:6379> linsert lst.tech after tec04 tec06  #後面插
(integer) 5 
redis 127.0.0.1:6379> linsert lst.tech before tec06 tec05 #前面插
(integer) 6 
redis 127.0.0.1:6379> linsert lst.tech before tec08 tec07 #參照點不存在,不插
(integer) -1
redis 127.0.0.1:6379> linsert lst.user after zhangsan zhangsan01  #列表中有多個pivot,以從左到右的第一個為準
(integer) 6
2)查詢

a)lindex

語法:lindex key index

解釋:通過索引index獲取列表的元素。 index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推

redis 127.0.0.1:6379> lindex lst.user 0  #表頭
"wangwu" 
redis 127.0.0.1:6379> lindex lst.user -1 #表尾
"ls005"
redis 127.0.0.1:6379> lindex lst.user 2 #第三個元素
"zhangsan"
redis 127.0.0.1:6379> lindex lst.user -2 #倒數第二個元素
"zhangsan"
b)lrange

語法:lrange key start stop  

解釋:獲取指定開始和結束範圍的一些列元素。0:表頭,-1:表尾。如果stop指定的元素在start的左邊,返回空列表

redis 127.0.0.1:6379> lrange lst.user 0 -1 #返回所有
1) "wangwu"
2) "lisi"
3) "zhangsan"
4) "zhangsan01"
5) "zhangsan"
6) "ls005"
redis 127.0.0.1:6379> lrange lst.user -1 0  #返回空
(empty list or set)
redis 127.0.0.1:6379> lrange lst.user 1 2  #返回多個
1) "lisi"
2) "zhangsan"
redis 127.0.0.1:6379> lrange lst.user 1 1   #返回一個元素
1) "lisi"

3)修改

lset

語法:lset key index value

解釋:設定列表指定索引的值,如果指定索引不存在則報錯

redis 127.0.0.1:6379> lset lst.user 2 zhangsan1  #設定第三個元素為zhangsan1
OK
redis 127.0.0.1:6379> lrange lst.user 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan1"
4) "zhangsan01"
5) "zhangsan"
6) "ls005"
redis 127.0.0.1:6379> lset lst.user 6 ls006  #指定索引不存在
(error) ERR index out of range
4)刪除

a)ltrim

語法:ltrim key start stop

解釋:保留指定區域的元素,其他元素全部刪除

redis 127.0.0.1:6379> ltrim lst.user 0 -2
OK
redis 127.0.0.1:6379> lrange lst.user 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan1"
4) "zhangsan01"
5) "zhangsan"
b)lrem

語法:lrem key count value

解釋:移除等於value的元素,當count>0時,從表頭開始查詢,移除count個;當count=0時,從表頭開始查詢,移除所有等於value的;當count<0時,從表尾開始查詢,移除|count| 個。

redis 127.0.0.1:6379> lrange lst.user 0 -1
 1) "zhangsan"
 2) "wangwu"
 3) "lisi"
 4) "zhangsan1"
 5) "zhangsan01"
 6) "zhangsan"
 7) "lisi"
 8) "zhangsan"
 9) "lisi"
10) "zhangsan"
redis 127.0.0.1:6379> lrem lst.user 2 zhangsan #移除前兩個zhangsan
(integer) 2
redis 127.0.0.1:6379> lrange lst.user 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan1"
4) "zhangsan01"
5) "lisi"
6) "zhangsan"
7) "lisi"
8) "zhangsan"
redis 127.0.0.1:6379> lrange lst.user -1 zhangsan #移除最後一個zhangsan
(empty list or set)
redis 127.0.0.1:6379> lrange lst.user 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan1"
4) "zhangsan01"
5) "lisi"
6) "zhangsan"
7) "lisi"
redis 127.0.0.1:6379> lrem lst.user 0 lisi  #移除所有lisi
(integer) 3
redis 127.0.0.1:6379> lrange lst.user 0 -1
1) "wangwu"
2) "zhangsan1"
3) "zhangsan01"
4) "zhangsan"
redis 127.0.0.1:6379> 
c)rpop

語法:rpop key

解釋:移除並返回表尾元素

redis 127.0.0.1:6379> rpop lst.user
"zhangsan"
d)lpop

語法:lpop key

解釋:移除並返回表尾元素

redis 127.0.0.1:6379> lpop lst.user
"wangwu"
5)其他

a)llen

語法:llen key

解釋:獲取列表長度

redis 127.0.0.1:6379> llen lst.user
(integer) 2

參考:http://redis.io/commands#list