六、Redis列表(list)类型参考记录(1)

作者: 温新

分类: 【Redis】

阅读: 1990

时间: 2020-08-31 15:24:24

列表(list)类型可以存储一个有序的字符串列表。常用操作是向列表两端添加元素,或者获得列表的某个片段。

列表类型内部使用双向链表(bouble linked list)实现,因此向两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。

缺点

通过索引访问元素比较慢。设想1000人排队买手机的场景画面,商家为了感谢粉丝的支持,决定奖励排在第 500名的这位顾客一部手机。为了找到这个顾客,商家需要从队首开始找。排得越靠后越花费时间。

经典使用场景

微博上的时事等有时效的内容。

基本命令

lpush 将一个或多个值插入列表头部

​ 语法:lpush key value1 [value2 ...]

127.0.0.1:6379> lpush number 1
(integer) 1
127.0.0.1:6379> lpush number 2 3
(integer) 3

lpush向列表左边增加元素。lpush先向列表左边加入2,然后再加入3。因此number键中的数据是3 2 1

rpush 向列表右边增加一个或多个值

​ 语法:rpush key value1 [value2 ...]

127.0.0.1:6379> rpush number 0 -1
(integer) 5

向列表右边增加了0和-1,此时列表中的值为 3 2 1 0 -1

lpop 从列表左边弹出一个元素并显示该值

​ 语法:lpop key

127.0.0.1:6379> lpop number
"3"

rpop 从列表右边弹出一个元素并显示该值

​ 语法:rpop key

127.0.0.1:6379> rpop number
"-1"

lpop/rpop命令2步骤下:1)移除列表左边的一个元素;2)返回被移除元素的值

llen 获取列表中元素的个数

​ 语法:llen key

127.0.0.1:6379> llen number
(integer) 3

key不存在时返回0

lrange 获取指定范围的元素

​ 语法:lrange key start end

# 获取所有元素
127.0.0.1:6379> lrange number 0 -1
1) "2"
2) "1"
3) "0"

# 获取前2个元素
127.0.0.1:6379> lrange number 0 1
1) "2"
2) "1"

1)若start索引位置比end索引位置靠后,则返回空列表

2)若end大于实际索引范围,则返回列表最右边的元素

lrem 删除列表中指定的值

​ 语法:lrem key count value

lrem删除列表中前count个值为value的元素,返回实际删除元素的个数。count值不同,lrem命令执行方式有些差异。

  1. 当 count > 0 时,lrem命令会从列表左边开始删除前count个值为value的元素;
  2. 当 count < 0 时,lrem命令会从列表右边开始删除前count个值为value的元素;
  3. 当 count = 0 时,lrem命令会删除所有值为value的元素。
127.0.0.1:6379> rpush number 2
(integer) 4
127.0.0.1:6379> lrange number 0 -1
1) "2"
2) "1"
3) "0"
4) "2"

# 从右边开始删除值为2的元素
127.0.0.1:6379> lrange number 0 -1
1) "2"
2) "1"
3) "0"
4) "2"
127.0.0.1:6379> lrem number -1 2
(integer) 1
127.0.0.1:6379> lrange number 0 -1
1) "2"
2) "1"
3) "0"

lindex 通过索引获取列表中的元素

​ 语法:lindex key index

127.0.0.1:6379> lindex number 0
"2"

lset 通过索引设置列表元素的值

​ 语法:lset key index value

# 列表元素中索引为1的值设置为7
127.0.0.1:6379> lset number 1 7
OK
请登录后再评论