【Redis】list类型

发布于:2025-04-15 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、介绍

Redis的list是一种有序、可重复且支持双向操作的数据结构,常用于实现消息队列等场景,支持在头部和尾部高效插入/删除元素,同时具备灵活的操作能力。

2、底层实现

list的存储结构根据元素数量和大小动态优化,不同版本之间的底层实现有区别。

【1】ziplist(压缩列表)

适用场景:

元素数量 < list-max-ziplist-entries(默认512个)且元素大小 < list-max-ziplist-value(默认64字节)

特点:

内存连续紧凑,减少内存碎片,但修改效率较低

【2】linkedlist(双向链表)

使用场景:

元素数量或大小超过ziplist阈值

特点:

支持头尾快速操作,但内存占用较高

【3】quicklist(Redis 3.3+默认)

结构:

由多个ziplist节点组成的双向链表(平衡内存和性能)

配置参数:

list-max-ziplist-size控制每个ziplist节点大小

3、常用指令

【1】基础操作

命令 作用
LPUSH key value 头部插入元素
RPUSH key value 尾部插入元素
LPOP key 头部移除并返回元素
RPOP key 尾部移除并返回元素
LLEN key 获取列表长度
LRANGE key start end 获取索引范围内的元素,0到-1代表全部元素

【2】高级操作

命令 作用
BLPOP key timeout 阻塞式头部弹出元素(若列表为空,等待timeout秒),如果timeout=0就一直阻塞
LTRIM key start end 修剪列表,仅保留指定范围内的元素
BRPOPLPUSH source dest timeout 原子化的从源列表尾部弹出元素,并推入目标列表头部

4、使用场景

根据list类型的特性对应的使用场景如下:

特性 说明 场景
双向操作 支持头部(LPUSH/LPOP)和尾部(RPUSH/RPOP)高效插入/删除元素 消息队列:生产者从头部推入任务,消费者从尾部取出任务
阻塞操作 BLPOP/BRPOP支持阻塞式等待元素,避免轮询 实时任务调度:消费者阻塞等待新任务,减少空转
元素可重复 允许存储重复值 操作日志:记录重复事件(如用户多次点击)
有序性 元素插入顺序排列 最新消息排行:保留最近的N条记录(如用户的搜索历史)
范围查询 LRANGE支持按索引范围获取元素 分页查询:获取列表的分页数据(如文章评论列表)
快速长度获取 LLEN可在O(1)时间复杂度获取列表长度 实时统计:快速统计待处理任务数量

网站公告

今日签到

点亮在社区的每一天
去签到