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

devtools/2025/2/2 6:37:57/

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.ppmy.cn/devtools/155363.html

相关文章

数据结构:二叉树—面试题(二)

1、二叉树的最近公共祖先 习题链接https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/ 描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点…

第38周:猫狗识别 (Tensorflow实战第八周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…

Python 类型注解

文章目录 Python 类型注解详解1. 引言2. Python 类型注解基础2.1 变量类型注解2.2 函数参数和返回值注解2.3 typing 模块的支持 3. 进阶:复杂数据类型3.1 可选类型(Optional)3.2 联合类型(Union)3.3 泛型(G…

基于Flask的旅游系统的设计与实现

【Flask】基于Flask的旅游系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为后端开发语言,结合前端Bootstrap框架,为用户提供了丰富…

【深度学习】softmax回归的从零开始实现

softmax回归的从零开始实现 (就像我们从零开始实现线性回归一样,)我们认为softmax回归也是重要的基础,因此(应该知道实现softmax回归的细节)。 本节我们将使用Fashion-MNIST数据集,并设置数据迭代器的批量大小为256。 import torch from IP…

家居EDI:Hom Furniture EDI需求分析

HOM Furniture 是一家成立于1977年的美国家具零售商,总部位于明尼苏达州。公司致力于提供高品质、时尚的家具和家居用品,满足各种家庭和办公需求。HOM Furniture 以广泛的产品线和优质的客户服务在市场上赢得了良好的口碑。公司经营的产品包括卧室、客厅…

2025_2_1 C语言中关于字符串

1.字符串 C语言中的字符串都是字符数组,以空字符 ‘\0’结尾。 创建一个字符数组必须以空字符结尾,不然会访问非法区域,直到找到\0为止 char c[] {a, b, c, \0};长度为n的字符串字面值,会存储在虚拟内存中的只读数据段中&#…

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

目录 1. Spring JDBC 简介 2. JdbcTemplate 介绍 3. 创建数据库和表 4. 配置 Spring JDBC 5. 创建实体类 6. 使用 JdbcTemplate 实现增、删、改、查操作 7. Spring JDBC 优点 8. 小结 1. Spring JDBC 简介 Spring JDBC 是 Spring 框架中的一个模块,旨在简化…