基本概念
Redis 列表是一种非常实用和多功能的数据结构,适用于各种场景,如消息队列、实时数据流、任务队列、排行榜、历史记录等。
列表底层是压缩列表(数据量小、元素简单时)和双向循环链表(数据量较大、元素复杂时)
列表类型命令:
列表插入和删除操作:
lpush key value1 value2
…:将一个或多个值插入到列表的头部(左侧)
# 向用户列表添加三个用户id
lpush users 1 2 3
rpush key value1 value2
…:将一个或多个值插入到列表的尾部(右侧)
lpop key
:从列表的头部(左侧)移除并返回一个元素。
rpop key
:从列表的尾部(右侧)移除并返回一个元素。
ltrim key start stop
:修剪(截取)列表,只保留指定范围内的元素。
列表元素访问和操作:
lindex key index
:返回列表中指定索引位置的元素。
lrange key start stop
:返回列表中指定范围内的元素(start 到 stop索引之间)。
llen key
:返回列表的长度(元素个数)。
lrem key count value
:从列表中删除指定数量的匹配元素。
lset key index value
:设置列表中指定索引位置的元素值。
linsert key before | after pivot value
:在列表中指定元素的前面或后面插入一个新元素。
dpoplpush source destination
:从一个列表的尾部(右侧)移除一个元素,并将它添加到另一个列表的头部(左侧)。
其他列表操作:
blpop key1 key2 ... timeout
:阻塞式的列表弹出操作,从多个列表中弹出元素,如果列表为空则阻塞等待指定时间。
brpop key1 key2 ... timeout
:阻塞式的列表弹出操作,从多个列表的尾部(右侧)弹出元素,如果列表为空则阻塞等待指定时间。
brpoplpush source destination timeout
:阻塞式的列表弹出和插入操作,从一个列表的尾部(右侧)弹出元素,并将它添加到另一个列表的头部(左侧),如果列表为空则阻塞等待指定时间。
列表使用场景:
1.消息队列:
使用 Redis 列表作为消息队列,可以实现简单的发布/订阅模式。生产者可以将消息添加到列表的尾部,而消费者可以从列表的头部获取和处理消息,实现异步任务的处理和消息传递。
2.实时数据流:
Redis 列表可以用于存储实时数据流,如日志、用户活动等。通过将新的数据追加到列表的尾部,可以轻松构建实时数据流,而消费者可以按需读取列表中的数据。
3.任务队列:
将需要处理的任务添加到 Redis 列表中,消费者可以从列表中获取任务并进行处理。这种方式可以实现任务的异步处理和调度,适用于后台任务、定时任务等场景。
4.最新消息/动态:
在社交媒体或新闻应用中,可以使用 Redis 列表存储最新的消息或动态。每当有新的消息生成时,将其添加到列表的头部,保持列表的固定长度,从而实现只保留最新的消息并方便获取。
5.排行榜/计数器:
使用 Redis 列表可以实现排行榜或计数器功能。通过将对象或元素的得分(如分数、点击数等)作为列表中的每个元素,可以按照得分进行排名和计数。
6.历史记录:
Redis 列表可以用于存储用户的历史记录,例如最近浏览的商品、搜索历史等。将新的记录添加到列表的头部,可以轻松地获取最近的记录。
7.缓存淘汰:
当使用 Redis 作为缓存时,可以使用列表类型来实现缓存的淘汰策略。将缓存的键按照使用时间顺序存储在列表中,当缓存空间不足时,可以通过移除列表尾部的键来淘汰最不常用的缓存。
上一篇:哈希(Hash)数据类型和命令(数据类型 二)
下一篇:集合数据类型