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

相关推荐
计算机程序设计小李同学几秒前
基于Python的在线零食购物商城系统的设计与实现
数据库·sqlite
Java爱好狂.16 分钟前
Java面试Redis核心知识点整理!
java·数据库·redis·分布式锁·java面试·后端开发·java八股文
小程故事多_8016 分钟前
开源界核弹级输出!蚂蚁 Agentar-Scale-SQL 凭 “编排式扩展” 技术,成为 Text-to-SQL 天花板
数据库·人工智能·sql·开源·aigc·embedding
谷隐凡二1 小时前
etcd在Kubernetes中的作用简单介绍
数据库·kubernetes·etcd
阿杆1 小时前
如何在 Spring Boot 中接入 Amazon ElastiCache
java·数据库·redis
qq_343247031 小时前
单机版认证kafka
数据库·分布式·kafka
2301_800256111 小时前
第十一章 PostgreSQL 服务器编程知识点梳理(1)
服务器·数据库·postgresql
松涛和鸣2 小时前
DAY32 Linux Thread Programming
linux·运维·数据库·算法·list
源代码•宸2 小时前
分布式缓存-GO(简历写法、常见面试题)
服务器·开发语言·经验分享·分布式·后端·缓存·golang
秦jh_2 小时前
【Qt】常用控件(上)
服务器·数据库·qt