【Redis存储】List列表

列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。

列表类型的特点:

1,列表中的元素按插入顺序排列,支持下标访问。元素的位置由插入顺序决定(先插的在前,后插的在后),不会自动排序。

2,列表中的元素是允许重复的。

3,List 底层是双向链表,支持从「表头(left)」和「表尾(right)」双向进行增删操作,核心命令(LPUSH/LPOP、RPUSH/RPOP)的时间复杂度均为 O (1),效率极高。

1,常见命令

  • LPUSH:将一个或者多个元素从左侧放入(头插)到 list 中。
  • LPUSHX:在 key 存在时,将一个或者多个元素从左侧放入(头插)到 list 中。不存在,直接返回。
  • RPUSH:将一个或者多个元素从右侧放入(尾插)到 list 中。
  • RPUSHX:在 key 存在时,将⼀个或者多个元素从右侧放入(尾插)到 list 中。
  • LRANGE:获取从 start 到 end 区间的所有元素,左闭右闭。
  • LPOP:从 list 左侧取出元素(即头删)。
  • RPOP:从 list 右侧取出元素(即尾删)。
  • LINDEX:获取从左数第 index 位置的元素。
  • LINSERT:在特定位置插入元素。
  • LLEN:获取 list 长度。
  • BLPOP:LPOP的阻塞版本。
  • BRPOP:RPOP的阻塞版本。

在列表中有元素的情况下,阻塞和非阻塞表现是⼀致的。但如果列表中没有元素,非阻塞版本会返回nil,但阻塞版本会根据自定义的 timeout (单位:秒。0秒表示永久阻塞),阻塞⼀段时间,期间 Redis 可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态。

LPUSH key element element ...

LPUSHX key element element ...

RPUSH key element element ...

RPUSHX key element element ...

LRANGE key start stop

LPOP key

RPOP key

LINDEX key index

LINSERT key <BEFORE | AFTER> pivot element // BEFORE 表示在目标元素之前插入,AFTER 表示在之后插入;pivot目标元素(列表中需存在该元素,否则插入失败返回-1);element 是要插入的新元素.

LLEN key

BLPOP key key ... timeout

BRPOP key key ... timeout

2,内部编码

列表类型的内部编码有两种:

ziplist(压缩列表):当列表的元素个数小于 list-max-ziplist-entries 配置(默认 512 个),同时,列表中每个元素的长度都小于 list-max-ziplist-value 配置(默认 64 字节)时,Redis会选用 ziplist 来作为列表的内部编码实现来减少内存消耗。

linkedlist(链表):当列表类型无法满足 ziplist 的条件时,Redis 会使用 linkedlist 作为列表的内部实现。

相关推荐
程序猿阿伟1 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za8986681 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
数据库小学妹2 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan1232 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
Elastic 中国社区官方博客2 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
YL200404262 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
DIY源码阁2 小时前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
cfm_29142 小时前
MySQL8.0 InnoDB Cluster
数据库·mysql
kTR2hD1qb2 小时前
Claude Code Skill的介绍与使用
java·前端·数据库·人工智能