【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 作为列表的内部实现。

相关推荐
jiayou6418 小时前
KingbaseES 表级与列级加密完全指南
数据库·后端
用户3074596982072 天前
Redis 延时队列详解
redis
GBASE2 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
烤代码的吐司君2 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3504 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3504 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3504 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库