Redis系列-存儲篇list主要操作命令小結
在總結list之前,先要弄明白幾個跟list相關的概念:
列表:一個從左到右的隊列,個人理解更類似於一個棧,常規模式下,先進列表的元素,后出。
表頭元素:列表最左端第一個元素。
表尾元素:列表最右端的最后一個元素。不包含任何元素的列表成為空列表。
1)新增
a)lpush
語法:lpush key value[value]
解釋:把一個或多個元素插入表頭。如果是多個value時,按照從左到右的次序插。返回插入元素的個數
[root@xsf001 ~]# 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