【Redis】List列表命令、编码方式及应用场景

List 列表

命令

编码方式

以前Redis对List有两种编码方式,一种是ziplist压缩列表,另一种是linkedlist链表,使用逻辑和哈希的ziplist和hashtable是一样的:具体参考((20260413212245-096hkh2 '哈希类型'))

Redis 5后,采用了quicklist的操作,相当于将ziplist的压缩特性和linkedlist的链表连接特性结合起来

应用场景

  • Redis 通常用list作为"数组"这样的结构,来存储多个元素,如
  • 作为消息队列,经典的模型就是生产者-消费者模型。消费者brpop,达到轮询的效果

    谁先执行到brpop命令,就谁先拿到这个请求,接下来又轮到消费者2、3。然后接着就是1、2、3...

brpop是block right pop,阻塞弹出,当列表为空时,就阻塞(相当于消费者在准备去"抢"这个新元素)。一直等到列表有新元素就push该元素,同时返回元素的内容。

  • 另外还有分频道的消息队列,所谓分频道就是在 Redis中有多个列表

    这种多频道,就可以在某种数据发生问题的时候也不会影响到其他数据(低耦合)

    同时消费者也可以读取多个频道(读取多个key)

PineLine

叫做流水线或者叫管道

假设列表里有很多元素,你需要循环这个列表,每一次都去取列表里的键值对元素的话,就要执行o(N)次的hgetall key,也就是很多次的网络请求。如果请求非常多,那就会导致阻塞

pineline的作用就是将多次的命令合并成一次的网络请求再进行通信。

注意,选择列表类型时,请参考:

同侧存取:(lpush + lpop)/ (rpush + rpop)为栈

异侧存取:(lpush + lrpop)/ (rpush + lpop)为队列

相关推荐
哥是强混1 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_1 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
水无痕simon2 小时前
6 数据库同义词
数据库
杜子不疼.2 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
BomanGe13 小时前
NSK W1501FA高速精密滚珠丝杠技术手册
数据库·经验分享·规格说明书
kiki-bf4 小时前
可用的mysql本地安装教程
数据库·mysql
绝世番茄4 小时前
登录表单布局:从 Column 到完整表单 —— 鸿蒙 HarmonyOS ArkTS 原生学习指南
华为·list·harmonyos·鸿蒙
多巴胺梦想家4 小时前
数据库恢复技术:当灾难来临
网络·数据库·oracle
北冥you鱼5 小时前
Go 语言初始化 MySQL 数据库实战指南:从零到生产环境部署
数据库·mysql·golang
SelectDB5 小时前
云数仓费钱?用 SelectDB Serverless 三步配出秒级弹性,最高降本 70%
数据库·云原生·数据分析