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

【Redis】List 类型的介绍和常用命令

1. 介绍

Redis 中的 list 相当于顺序表,并且内部更接近于“双端队列”,所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标,-1 表示倒数第一个元素,-2 表示倒数第二个元素,和 Java 中的 List 相同的是,列表中的元素是有序的,并且允许重复

 

2. 常用命令

命令

介绍

时间

rpush key value [value ...]

将一个或多个值插入到列表 key 的表尾(最右边)

O (k),k 是元素个数

lpush key value [value ...]

将一个或多个值插入到列表 key 的表头(最左边)

O (k),k 是元素个数

linsert key before

在列表的元素 pivot 之前插入元素 value

O (n),n 是 pivot 距离头的距离

after pivot value

在列表的元素 pivot 之后插入元素 value

O (n),n 是 pivot 距离头的距离

lrange key start end

获取列表指定范围内的元素

O (s+n),s 是 start 偏移量,n 是 start 到 end 的范围。

lindex key index

通过索引获取列表中的元素

O (n),n 是索引的偏移量

llen key

获取列表的长度

O (1)

lpop key

移除并返回列表 key 的头元素

O (1)

rpop key

移除并返回列表 key 的尾元素

O (1)

lrem key count value

count 大于 0 时,从左开始搜索,小于 0 时从右开始搜索,删除count 个值等于 value 的元素

O (k),k 是元素个数

ltrim key start end

保留 key 对应列表中指定区间 [start, end] 的元素

O (k),k 是元素个数

lset key index value

将列表 key 下标为 index 的元素的值设置为 value

O (n),n 是索引的偏移量。

blpop

lpop 的阻塞版本

O (1)

brpop

rpop 的阻塞版本

O (1)

3. 内部编码

在 Redis 3.2 之前主要采用linkedlistziplist,3.2 之后主要采用quicklist

linkedlist:双向链表

ziplist:经过特殊编码的连续内存块的顺序存储结构,它将多个元素紧凑地存储在一起,以节省内存空间

quicklist:它是一个双向链表,每个节点是一个 ziplist

4. 应用场景

  1. 消息队列

可以使用 lpush + brpop 来实现生产者-消费者模型队列

  1. 最新消息列表

用于展示最新的一些信息,如社交媒体平台上用户的最新动态、新闻网站的最新消息等,每当有新消息产生时,使用rpush命令将消息添加到 List 的尾部。要获取最新消息,通过lrange命令并设置合适的参数来获取 List 尾部的若干条消息。比如,在一个微博系统中,用户发布的微博可以存储在一个 List 结构中,通过获取 List 的尾部消息来展示用户关注的人发布的最新微博,可以方便地控制显示的消息数量,并且按照消息的发布顺序进行存储和展示,易于实现分页功能,以展示更多的消息


http://www.kler.cn/a/525148.html

相关文章:

  • 一文讲解Java中的BIO、NIO、AIO之间的区别
  • 快速分析LabVIEW主要特征进行判断
  • AI编译器之——为什么大模型需要Relax?
  • FireFox | Google Chrome | Microsoft Edge 禁用更新 final版
  • 虹科分享 | 汽车NVH小课堂之听音辨故障
  • 创作三载·福启新章2025
  • AI时代:行动者胜,被动者汰
  • Hive:日志,hql运行方式,Array,行列转换
  • UE学习日志#14 GAS--ASC源码简要分析10 GC相关
  • 设计模式的艺术-策略模式
  • concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
  • 蓝桥杯python语言基础(5)——函数
  • python-leetcode-从前序与中序遍历序列构造二叉树
  • 新年学习计算机名校课程
  • VPR概述、资源
  • 002-基于Halcon的图像几何变换
  • websocket webworker教程及应用
  • Acwing94递归实现排列型枚举
  • 通过配置代理解决跨域问题(Vue+SpringBoot项目为例)
  • 【C语言练习题】整数和实数在计算机中的二进制表示
  • C语言中的函数有哪些种类型
  • Your build is currently configured to use Java 21.0.3 and Gradle 6.6.1. 处理办法
  • go-zero学习笔记(一)
  • 《多线程基础之互斥锁》
  • Java基础知识-第14章-Java注解
  • 上位机知识篇---Linux源码编译安装链接命令