目录
列表( list)类型是用来存储多个有序的字符串,a、b、c、c、b四个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储(2^32-1)个元素(4294967295)。
在Redis 中,可以对列表两端插入( push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。
列表类型有两个特点:
第一、列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表。
第二、列表中的元素可以是重复的。
1、List 操作命令
1-1、rpush、lpush、lrange 命令
# 向左插入
lpush key element [element ...]
# 向右插入
rpush key element [element ...]
# 索引下标特点:从左到右为0到N-1,lrange 0 -1 命令可以从左到右获取列表的所有元素
lrange key start stop
1-2、linsert 命令
# 在某个元素前或后插入新元素
linsert key BEFORE|AFTER pivot element
1-3、lpop 、rpop 命令
# 从列表左侧弹出,count为弹窗个数,缺省一个,会删除元素
lpop key [count]
# 从列表右侧弹出,count为弹窗个数,缺省一个,会删除元素
rpop key [count]
1-4、lrem 命令
# 对指定元素进行删除
# 从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
# count > 0,从左到右,删除最多count个元素。
# count < 0,从右到左,删除最多count绝对值个元素。
# count = 0,删除所有。
lrem key count element
1-5、ltirm、lset、lindex、llen 命令
# 按照索引范围修剪列表
ltrim key start stop
# 修改指定索引下标的元素
lset key index element
# 获取列表指定索引下标的元素
lindex key index
# 获取列表长度
llen key
1-6、blpop、brpop 命令
# 阻塞式弹出元素
blpop key [key ...] timeout
# 阻塞式弹出元素
brpop key [key ...] timeout
#blpop和brpop是lpop和rpop的阻塞版本,除此之外还支持多个列表类型,也支持设定阻塞时间,单位秒,如果阻塞时间为0,表示一直阻塞下去。我们以brpop为例说明。
A客户端阻塞了(因为没有元素就会阻塞)
A客户端一直处于阻塞状态。此时在B客户端执行:插入一个666
A客户端则输出:666
2、使用场景
消息队列
Redis 的 lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。
文章列表:
每个用户有属于自己的文章列表,现需要分页展示文章列表。此时可以考虑使用列表,因为列表不但是有序的,同时支持按照索引范围获取元素。
实现其他数据结构
- lpush + lpop = Stack(栈)
- lpush + rpop = Queue (队列)
- lpsh + ltrim = Capped Collection(有限集合)
- lpush + brpop = Message Queue(消息队列)