【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)为队列

相关推荐
21439652 小时前
如何利用RMAN修复逻辑坏块_VALIDATE CHECK LOGICAL验证块内结构损坏
jvm·数据库·python
身如柳絮随风扬2 小时前
分布式锁深度剖析:ZooKeeper(CP)与 Redis(AP)的实现原理与对比
redis·分布式·zookeeper
qq_206901392 小时前
如何使用 AWS Lambda 和 Python 获取 EMR 集群的标签列表
jvm·数据库·python
2301_777599372 小时前
JavaScript中利用类语法模拟实现单例模式的方案
jvm·数据库·python
qq_342295822 小时前
Bootstrap制作后台管理系统布局 Bootstrap如何搭建Dashboard框架
jvm·数据库·python
m0_640309302 小时前
SQL报表容灾与备份设计_灾备恢复策略
jvm·数据库·python
a9511416422 小时前
golang如何设计分布式ID生成系统_golang分布式ID生成系统设计指南
jvm·数据库·python
2301_782659182 小时前
Go 中高效过滤结构体切片:基于用户名映射去重的最优实践
jvm·数据库·python
2301_813599552 小时前
Golang怎么处理HTTP响应_Golang HTTP响应处理教程【对比】
jvm·数据库·python