-
是一个双端链表结构,容量是2^32-1的元素
-
对两端的操作想能很高,通过索引下标操作中间节点的性能较差
-
列表的元素类型为string的,按照插入的顺序排序,在列表的头部或尾部添加元素
-
如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。
命令
设置
-
在头部插入
lpush 键 值 值 ...
-
在尾部插入
rpush 键 值 值 ...
-
在一个元素的前或后插入新元素
linsert 键 before|after pivot 原值 新值
-
设置指定索引的元素值
-
索引从0开始
索引可以是负数,表示偏移量从list的尾部开始
-1表示最后一个元素
-
lset 键 索引 值
获取
-
移除并返回key对应的list的第一个元素
lpop 键
-
移除并返回key对应的list的最后一个元素
rpop 键
-
返回存储在key的列表中的指定范围的元素
-
两个索引都是从0开始,偏移量可以是负数
-
lrange 键 索引1 索引2
其他
-
裁剪列表,改为原集合的一个子集
-
索引是从0开始的,可以是负数
-
ltrim 键 索引1 索引2
-
返回存储在key里的list的长度
llen 键
-
返回列表中索引对应的值
lindex 键 索引
阻塞式操作
-
当列表中没有元素时blpop/brpop将阻塞在这里,直到等待超时或发现可弹出元素,设置多个键时会逐一去每个键中获取值
# 从左弹出
blpop key key timeout
# 从右右弹出
brpop key key timeout
-
将第一个key中的值加入到第二个key中,如果第一个key没有值,将会阻塞,直到等待超时或发现可弹出元素
brpoplpush key key timeout
应用场景
-
粉丝列表
# 将粉丝加入到列表中
lpush fans 名
# 显示粉丝
lrange
-
时间轴
# 存入的信息
lpush
# 查询的信息,最新的会在最上面
lrange
-
最新文章
# 存入的信息
lpush
# 查询的信息,最新的会在最上面
lrange
-
消息队列
-
消费者等待着,当生产者产生数据时,消费者就可以获取数据并进行处理
-
# 阻塞等待队列中推送数据
# 将依次获取到推送的1、2、3
blpop queue:1
# 推送数据
rpush queue:1 1
rpush queue:1 2
rpush queue:1 3
-
消息订阅场景
# 设置用户订阅的消息内容
lpush likearticle:user1 message1 message2
# 获取用户订阅的前10条消息
lrange likearticle:user1 0 9
# 获取用户订阅的所有条消息
lrange likearticle:user1 0 -1
- 是一个双端链表结构,容量是2^32-1的元素 - 对两端的操作想能很高,通过索引下标操作中间节点的性能较差 - 列表的元素类型为string的,按照插入的顺序排序,在列表的头部或尾部添加元素 - 如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。 # 命令 ## 设置 - 在头部插入 ``` lpush 键 值 值 ... ``` - 在尾部插入 ``` rpush 键 值 值 ... ``` - 在一个元素的前或后插入新元素 ``` linsert 键 before|after pivot 原值 新值 ``` - 设置指定索引的元素值 - 索引从0开始 索引可以是负数,表示偏移量从list的尾部开始 -1表示最后一个元素 ``` lset 键 索引 值 ``` ## 获取 - 移除并返回key对应的list的第一个元素 ``` lpop 键 ``` - 移除并返回key对应的list的最后一个元素 ``` rpop 键 ``` - 返回存储在key的列表中的指定范围的元素 - 两个索引都是从0开始,偏移量可以是负数 ``` lrange 键 索引1 索引2 ``` ## 其他 - 裁剪列表,改为原集合的一个子集 - 索引是从0开始的,可以是负数 ``` ltrim 键 索引1 索引2 ``` - 返回存储在key里的list的长度 ``` llen 键 ``` - 返回列表中索引对应的值 ``` lindex 键 索引 ``` ## 阻塞式操作 - 当列表中没有元素时blpop/brpop将阻塞在这里,直到等待超时或发现可弹出元素,设置多个键时会逐一去每个键中获取值 ``` # 从左弹出 blpop key key timeout # 从右右弹出 brpop key key timeout ``` - 将第一个key中的值加入到第二个key中,如果第一个key没有值,将会阻塞,直到等待超时或发现可弹出元素 ``` brpoplpush key key timeout ``` # 应用场景 - 粉丝列表 ``` # 将粉丝加入到列表中 lpush fans 名 # 显示粉丝 lrange ``` - 时间轴 ``` # 存入的信息 lpush # 查询的信息,最新的会在最上面 lrange ``` - 最新文章 ``` # 存入的信息 lpush # 查询的信息,最新的会在最上面 lrange ``` - 消息队列 - 消费者等待着,当生产者产生数据时,消费者就可以获取数据并进行处理 ```redis # 阻塞等待队列中推送数据 # 将依次获取到推送的1、2、3 blpop queue:1 # 推送数据 rpush queue:1 1 rpush queue:1 2 rpush queue:1 3 ``` - 消息订阅场景 ```redis # 设置用户订阅的消息内容 lpush likearticle:user1 message1 message2 # 获取用户订阅的前10条消息 lrange likearticle:user1 0 9 # 获取用户订阅的所有条消息 lrange likearticle:user1 0 -1 ```