列表类型,可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段
列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度是 o(1)
,获取越接近两端的元素速度就越快
链表的代价是通过索引访问元素比较慢
向列表两端添加元素
向列表左边添加元素,返回增加后列表的长度
LPUSH key value1 value2
127.0.0.1:6379>
LPUSH
number 1
(
integer) 1
127.0.0.1:6379>
LPUSH
number 1 2 3
(
integer) 4
向列表右边增加元素,返回增加后列表的长度
RPUSH key value1 value2
127.0.0.1:6379>
RPUSH
number 7 8 9
(
integer) 7
向列表两端移除元素
向左边移除元素,返回被移除的元素
127.0.0.1:6379>
LPOP
number
"3"
向右边移除元素,返回被移除的元素
127.0.0.1:6379>
RPOP
number
"9"
获取列表中元素的个数
当键不存在是,返回 0
127.0.0.1:6379>
LLEN
number
(
integer) 5
获取列表片段
可以根据索引范围获取某一段数据,索引从 0
开始
LRANGE key startIndex stopIndex
127.0.0.1:6379> LRANGE number 0 1 1) "2" 2) "1"
LRANGE
也支持负索引,比如 -1
表示最右边的第一个元素
127.0.0.1:6379> LRANGE number -2 -1 1) "7" 2) "8"
所以,我们使用
LRANGE number 0 -1
可以获取列表中的所有元素
如果 start
的索引位置比
stop
靠后,返回空列表
如果 stop
大于实际索引范围,则会返回到列表最右边的元素
删除列表中指定的值
LREM key count value
会删除列表中前 count
个值为
value
的元素,返回实际删除的元素个数
·
当
count > 0
时,会从左边开始删除
·
当
count < 0
时,会从右边开始删除
·
当
count = 0
时,会删除所有
127.0.0.1:6379> LRANGE number 0 -1
1) "2"
2) "1"
3) "1"
4) "7"
5) "8"
127.0.0.1:6379> LREM number 1 2
(integer) 1
127.0.0.1:6379> LRANGE number 0 -1
1) "1"
2) "1"
3) "7"
4) "8"
获取和设置指定索引的元素值
LINDEX key index
127.0.0.1:6379> LRANGE number 0 -1
1) "1"
2) "1"
3) "7"
4) "8"
127.0.0.1:6379> LINDEX number 1
"1"
LSET key index value
127.0.0.1:6379> LSET number 1 2
OK
127.0.0.1:6379> LRANGE number 0 -1
1) "1"
2) "2"
3) "7"
4) "8"
只保留列表指定片段
删除指定范围之外的所有元素,指定范围和 LRANGE
一致
LTRIM key startIndex endIndex
127.0.0.1:6379> LRANGE number 0 -1
1) "1"
2) "2"
3) "7"
4) "8"
127.0.0.1:6379> LTRIM number 1 2
OK
127.0.0.1:6379> LRANGE number 0 -1
1) "2"
2) "7"
向列表中插入元素
LINSERT key BEFORE | AFTER pivot value
LINSERT
会在列表中从左到右查找值为
pivot
的元素,然后根据第二个参数
BEFORE | AFTER
决定将值插入到该元素后面还是前面
127.0.0.1:6379>
LRANGE
number 0
-1
1) "2"
2) "7"
127.0.0.1:6379>
LINSERT
number
AFTER 2 3
(
integer) 3
127.0.0.1:6379>
LRANGE
number 0
-1
1) "2"
2) "3"
3) "7"
127.0.0.1:6379>
LINSERT
number
BEFORE 7 4
(
integer) 4
127.0.0.1:6379>
LRANGE
number 0
-1
1) "2"
2) "3"
3) "4"
4) "7"
将元素从一个列表转移到另一个列表
RPOPLPUSH source destination
把 source
右边的第一个元素弹出给
destination
127.0.0.1:6379> LRANGE number 0 -1
1) "2"
2) "3"
3) "4"
4) "7"
127.0.0.1:6379> RPOPLPUSH number numberCopy
"7"
127.0.0.1:6379> LRANGE numberCopy 0 -1
1) "7"
127.0.0.1:6379> LRANGE number 0 -1
1) "2"
2) "3"
3) "4"
来源:Enda Yuan