【Redis】List 类型的介绍和常用命令

1. 介绍

Redis 中的 list 相当于顺序表,并且内部更接近于"双端队列",所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标,-1 表示倒数第一个元素,-2 表示倒数第二个元素,和 Java 中的 List 相同的是,列表中的元素是有序的,并且允许重复

2. 常用命令

|-------------------------------|---------------------------------------------------------|--------------------------------------------|
| 命令 | 介绍 | 时间 |
| rpush key value [value ...] | 将一个或多个值插入到列表 key 的表尾(最右边) | O (k),k 是元素个数 |
| lpush key value [value ...] | 将一个或多个值插入到列表 key 的表头(最左边) | O (k),k 是元素个数 |
| linsert key before | 在列表的元素 pivot 之前插入元素 value | O (n),n 是 pivot 距离头的距离 |
| after pivot value | 在列表的元素 pivot 之后插入元素 value | O (n),n 是 pivot 距离头的距离 |
| lrange key start end | 获取列表指定范围内的元素 | O (s+n),s 是 start 偏移量,n 是 start 到 end 的范围。 |
| lindex key index | 通过索引获取列表中的元素 | O (n),n 是索引的偏移量 |
| llen key | 获取列表的长度 | O (1) |
| lpop key | 移除并返回列表 key 的头元素 | O (1) |
| rpop key | 移除并返回列表 key 的尾元素 | O (1) |
| lrem key count value | count 大于 0 时,从左开始搜索,小于 0 时从右开始搜索,删除count 个值等于 value 的元素 | O (k),k 是元素个数 |
| ltrim key start end | 保留 key 对应列表中指定区间 [start, end] 的元素 | O (k),k 是元素个数 |
| lset key index value | 将列表 key 下标为 index 的元素的值设置为 value | O (n),n 是索引的偏移量。 |
| blpop | lpop 的阻塞版本 | O (1) |
| brpop | rpop 的阻塞版本 | O (1) |

3. 内部编码

在 Redis 3.2 之前主要采用linkedlistziplist,3.2 之后主要采用quicklist

linkedlist:双向链表

ziplist:经过特殊编码的连续内存块的顺序存储结构,它将多个元素紧凑地存储在一起,以节省内存空间

quicklist:它是一个双向链表,每个节点是一个 ziplist

4. 应用场景

  1. 消息队列

可以使用 lpush + brpop 来实现生产者-消费者模型队列

  1. 最新消息列表

用于展示最新的一些信息,如社交媒体平台上用户的最新动态、新闻网站的最新消息等,每当有新消息产生时,使用rpush命令将消息添加到 List 的尾部。要获取最新消息,通过lrange命令并设置合适的参数来获取 List 尾部的若干条消息。比如,在一个微博系统中,用户发布的微博可以存储在一个 List 结构中,通过获取 List 的尾部消息来展示用户关注的人发布的最新微博,可以方便地控制显示的消息数量,并且按照消息的发布顺序进行存储和展示,易于实现分页功能,以展示更多的消息

相关推荐
IT陈图图10 分钟前
CANN生态数据引擎:minddata的缓存策略与性能调优
缓存·cann
Re.不晚36 分钟前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设1 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据1 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300961 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919101 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
亓才孓1 小时前
[JDBC]PreparedStatement替代Statement
java·数据库
m0_466525292 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊3 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
摇滚侠3 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算