本质是一个链表,在其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>