当前位置: 首页 > news >正文

redis学习笔记(四)—— list数据类型

前言

list 列表类型用来存储多个有的字符串,其结构就类似于 双端队列;

可以在队列两端插入和删除、可以获取指定范围的元素列表、获取指定索引下标的元素。

列表类型的特点

  • 列表中的元素是有序的,可以通过下标获取某个元素或者某个范围的元素列表
  • 列表中的元素是允许重复的

基本命令

添加

  • LPUSH
lpush key element [element...]

在 list 列表左侧添加一个或多个元素

  • RPUSH
rpush key element [element...]

在 list 列表右侧添加一个或多个元素

  • LINSERT
linsert key [before | after] pivot element

在 指定元素 之前/之后 插入一个元素

当 list 列表中 存在多个 pivot 元素时,默认在第一个pivot元素之前或者之后插入

  • lpushx / rpushx

lpush、rpush命令当 key 不存在时会 添加一个新的 key,然后再添加元素

lpushx、rpushx 命令当 key 不存在时就添加失败,不会添加一个新的 key。

lpushx key element [element...] rpushx key element [element...]

查找

  • lrange
lrange key start end

获取 list 列表中对应区间的元素

  • lindex
lindex key index

根据 索引 index 获取对应的元素

  • llen
llen key

获取 list 列表中的元素个数

删除

  • lpop
lpop key

从 list 列表左侧删除一个或者多个

  • rpop
rpop key [count]

从 list 列表右侧删除一个或者多个元素

  • lrem
lrem key count value

删除任意个 value

count

  • >0: 从 list 列表左侧删除 count 个value
  • <0: 从 list 列表右侧删除 |count| 个value
  • ==0: 删除 list 列表中所有的 value

  • ltrim
ltrim key start end

只保留 list列表中,区间[start, end] 的元素(这里start,end指的都是下标,从0开始)

修改

  • lset
lset key index value

根据下标索引,设置对应的值

阻塞

  • blpop
blpop key [key...] timeout

阻塞版本的 lpop,可以等待多个key

  • brpop
brpop key [key...] timeout

阻塞版本的 rpop,可以等待多个key

  • 当 key 对应 list 列表存在元素时,阻塞版本的blpop/brpop和lpop/rpop 没有区别
  • 当 key 对应的 list 列表不存在元素时,blpop/brpop 阻塞等待(时间:timeout),而 lpop/rpop 直接返回

内部编码

双重编码策略:ziplist与linkedlist

Redis为List设计了两种内部编码,会根据数据特性自动选择:

  • ziplist 压缩列表

  • linkedlist 双向链表

简单来说当 list 列表中所有字符串元素长度比较小、且元素个数比较少时,就采用 ziplist

当list 列表中存储字符串元素长度比较大,或者元素个数比较多时,就采用 linkedlist

quicklist

从Redis 3.2开始,List的默认编码改为了quicklist。quicklist是ziplist和linkedlist的混合体:它是一个双向链表,但每个节点都是一个ziplist。这样既保留了ziplist的内存效率,又获得了linkedlist的插入性能。

本篇文章到这里就结束了,感谢支持
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

http://www.jsqmd.com/news/375310/

相关文章:

  • 基于springboot和vue框架的企业人才招聘系统
  • 行业内专业的2025板材十大品牌排名 - 品牌推荐(官方)
  • 基于springboot和vue框架的公司人事工资管理系统 员工绩效考科福利系统
  • AT_arc212_d [ARC212D] Two Rooms
  • Writeup:AliCrackme2
  • Day19
  • 基于深度学习YOLOv8的密集行人检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于深度学习YOLOv10的安全背心穿戴识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 市面上专业的2026板材十大品牌有哪些 - 品牌推荐(官方)
  • 基于springboot和vue框架的中小学学生成绩查询系统
  • 基于深度学习YOLOv10的杂草检测系统(12种)(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 面板数据模型:区域与企业经济分析的实证工具
  • AI应用架构师必知:AI模型监控与告警的核心要点
  • 相机标定(Calibration)01-4:相机标定中不同标定板的优缺点【棋盘格、圆点阵列、ArUco标记板、AprilTag标记板、3D标定物】
  • 基于深度学习YOLOv10的篮球运动员检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • Spark + 数据湖:构建实时分析管道的5个关键技巧
  • 陀螺仪和加速度计(模拟状态,计算运动状态)
  • 提示工程性能测试框架对比:主流工具的性能、易用性、扩展性全测评
  • 数据治理标准化:ISO 38505在大数据环境下的应用
  • 市面上2026板材厂家排名 - 品牌推荐(官方)
  • 基于深度学习YOLOv10的密集行人检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于深度学习YOLOv10的可回收塑料识别分类检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 深入解析:MySQL中,binlog文件开头的Previous_gtids_log_event是如何计算的
  • nc is qt
  • 基于深度学习YOLOv8的小目标车辆检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)
  • NOIWC 2026 游继
  • 靠谱的2025板材厂家排名 - 品牌推荐(官方)
  • 市面上专业的2025板材工厂排名 - 品牌推荐(官方)
  • 2/12 状压dp枚举子集类问题练习
  • Vim命令