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

相关推荐
hweiyu0010 分钟前
Redis命令:RPUSHX
redis·缓存
zyseo821 分钟前
谷歌SEO 抓取日志分析脚本:解析访问日志,看穿 Googlebot 的抓取行为
大数据·数据库·搜索引擎·自动化
ai大模型-探索者1 小时前
Milvus向量数据库(介绍与使用)
数据库·milvus
minglie11 小时前
zynq联网配置
网络·数据库·php
小羊没烦恼!1 小时前
深入浅出SQL Server中的死锁
java·开发语言·前端·数据库·后端·spring·c#
我不会插花弄玉2 小时前
9. 表的内连和外连【由浅入深-MySQL】
android·数据库·mysql
Techblog of HaoWANG2 小时前
Ubuntu 下将 Ollama 服务配置为监听 0.0.0.0:11434 完整实践
linux·数据库·ubuntu·ollama
似水流年QC2 小时前
LangChain 入门与实战
服务器·数据库·langchain