Redis-List常用命令

204 阅读2分钟

本质是一个链表,在其before,node,after ,left,right都可以进行插入 消息队列(Lpush,Rpop) 栈(Lpush,Lpop)

1. lpush,rpush 插入

lpush key element 左边插入 rpush key element 右边插入

127.0.0.1:6379> lpush alist one
(integer) 1
127.0.0.1:6379> lpush alist two
(integer) 2
127.0.0.1:6379> lpush alist three
(integer) 3
127.0.0.1:6379> lrange alist 0 -1 # 从左边插入
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpush alist right # 从右边插入
(integer) 4
127.0.0.1:6379> get alist
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrange alist 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> 

2. Lpop Rpop 弹出

127.0.0.1:6379> lpop alist #弹出左边的即头部第一个
"three"
127.0.0.1:6379> rpop alist#弹出右边的即尾部第一个
"right"
127.0.0.1:6379> lrange alist 0 -1
1) "two"
2) "one"
127.0.0.1:6379> 

3.lindex 通过下标获取值

127.0.0.1:6379> lrange alist 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex alist 1
"one"
127.0.0.1:6379> lindex alist 0
"two"
127.0.0.1:6379> 

4. llen

llen key 获取长度

127.0.0.1:6379> llen alist
(integer) 2

5. lrem

lrem key count element

  • 从key列表中移除前count次出现的值为element的元素
  • count>0 从头往尾删除
  • count<0 从尾往头
  • count=0 删除所有值为element的元素

返回值:被移除的元素个数

1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "4"
7) "3"
8) "2"
127.0.0.1:6379> lrem alist 0 1
(integer) 1
127.0.0.1:6379> lrange alist 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
5) "4"
6) "3"
7) "2"
127.0.0.1:6379> 

6. ltrim 修剪一个已经存在的list

ltrim key start end

  • start 和end <0 表示从尾部开始
  • start>end 或start>list.len 不会报错,置为空表
  • end>list.len 则认为是最后一个元素
127.0.0.1:6379> lrange alist 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
5) "4"
6) "3"
7) "2"
127.0.0.1:6379> ltrim alist 0 9
OK
127.0.0.1:6379> lrange alist 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
5) "4"
6) "3"
7) "2"
127.0.0.1:6379> ltrim alist 0 3
OK
127.0.0.1:6379> lrange alist 0 -1
1) "2"
2) "3"
3) "4"
4) "5"

7. rpoplpush

原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素),并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOPLPUSH mylist myotherlist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"
redis> LRANGE myotherlist 0 -1
1) "three"
redis> 

8. lset

lset key index value

设置 index 位置的list元素的值为 value。

当index超出范围时会返回一个error。

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LSET mylist 0 "four"
OK
redis> LSET mylist -2 "five"
OK
redis> LRANGE mylist 0 -1
1) "four"
2) "five"
3) "three"
redis> 

9. linsert

LINSERT key BEFORE|AFTER pivot value

把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。

当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。

当 key 存在,但保存的不是一个list的时候,会返回error。

返回: 经过插入操作后的list长度,或者当 pivot 值找不到的时候返回 -1。

127.0.0.1:6379> lpush list hello
(integer) 1
127.0.0.1:6379> lpush list world
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> linsert list before world ,
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) ","
2) "world"
3) "hello"
127.0.0.1:6379>