Redis 7.x 系列【7】数据类型之列表(List)

news2024/11/18 3:41:21

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 常用命令
      • 2.1 RPUSH
      • 2.2 LPUSH
      • 2.3 LRANGE
      • 2.4 LINDEX
      • 2.6 LREM
      • 2.7 LLEN
      • 2.8 LPOP
      • 2.9 RPOP
      • 2.10 LSET
    • 3. 应用场景

1. 概述

Redis List(列表)是一种基于双向链表的数据结构,允许包含重复的元素,支持在列表的头部和尾部添加或删除元素。
在这里插入图片描述

2. 常用命令

List 相关的所有命令:

命名描述
LMOVE删除源列表的第一个或最后一个元素,并移入到目标列表中的第一个或最后一个位置
LMPOP弹出一个或多个元素
BLMOVELMOVE的阻塞变体
BLMPOPLMPOP的阻塞变体
BLPOP移出并获取列表的第一个元素
BRPOP移出并获取列表的最后一个元素
BRPOPLPUSH从列表中弹出一个值,并将该值插入到另外一个列表中并返回它
LINDEX通过索引获取列表中的元素
LINSERT在列表的元素前或者后插入元素
LLEN获取列表长度
LPOP移出并获取列表的第一个元素
LPOS返回列表中匹配元素的索引
LPUSH将一个或多个值插入到列表头部
LPUSHX将一个值插入到已存在的列表头部
LRANGE获取列表指定范围内的元素
LREM移除列表元素
LSET通过索引设置列表元素的值
LTRIM对一个列表进行修剪
RPOP移除并获取列表最后一个元素
RPOPLPUSH移除列表的最后一个元素,并将该元素添加到另一个列表并返回
RPUSH在列表中添加一个或多个值
RPUSHX为已存在的列表添加值

2.1 RPUSH

RPUSH 向存存储在 key 中的列表的尾部插入所有指定的值(多个时依次从左到右按序从列表尾部插入)。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 返回值为执行操作后的列表长度,当 key 保存的不是列表,那么会返回一个错误。

基本语法:

RPUSH key element [element ...]

示例:

redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "world"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"

2.2 LPUSH

LPUSH 用于将一个或多个值插入到列表的头部,返回值为执行操作后列表的长度。

注意事项:

  • 如果 key 不存在,那么在进行 push 操作前会创建一个空列表。
  • 如果 key 对应的值不是 List 类型,那么会返回一个错误。
  • 可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素按在参数中出现的顺序,从左到右依次插入到 list 的头部。

基本语法:

LPUSH key element [element ...]

示例:

redis> LPUSH mylist "world"
(integer) 1
redis> LPUSH mylist "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"

2.3 LRANGE

LRANGE用于返回列表中指定区间内的元素,区间以偏移量 STARTEND 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

基本语法:

LRANGE key start stop

注意事项:

  • stop 下标也在 LRANGE 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,例如执行 LRANGE list 0 10 ,结果是一个包含 11 个元素的列表
  • 超出范围的下标值不会引起错误,例如 start 下标比列表的最大下标还要大时,那么会返回一个空列表。

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LRANGE mylist 0 0
1) "one"
redis> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist 5 10
(empty list or set)

2.4 LINDEX

LINDEX 返回列表 key 里索引 index 位置存储的元素。 index 下标是从 0 开始索引的,所以 ``0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素,在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。当index 超出索引范围时返回 nil

基本语法:

LINDEX key index

示例:

redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LINDEX mylist 0
"Hello"
redis> LINDEX mylist -1
"World"
redis> LINDEX mylist 3
(nil)

2.6 LREM

LREM 用于从列表 key 中删除前 count 个值等于 element 的元素,返回值为删除元素个数。这个 count 参数通过下面几种方式影响这个操作:

  • count > 0: 从头到尾删除值为 value 的元素。
  • count < 0:从尾到头删除值为 value 的元素。
  • count = 0:移除所有值为 value 的元素。

例如, LREM list -2 “hello” 会从列表中删除最后两个出现的 “hello”

基本语法:

LREM key count element

示例:

redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "hello"
(integer) 2
redis> RPUSH mylist "foo"
(integer) 3
redis> RPUSH mylist "hello"
(integer) 4
redis> LREM mylist -2 "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "foo"

2.7 LLEN

LLEN 用于返回存储在 key 中的列表长度。 如果 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

基本语法:

LLEN key

示例:

redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LPUSH mylist "Redis.com.cns"
(integer) 3
redis> LLEN mylist
(integer) 3

2.8 LPOP

LPOP 命令用于删除并返回存储在 key 中的列表的第一个元素。返回值为列表的首元素,key 不存在的时候返回 nil

基本语法:

LPOP key

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LPOP mylist
"one"
redis> LRANGE mylist 0 -1
1) "two"
2) "three"

2.9 RPOP

RPOP 用于移除并返回列表 key 的最后一个元素。返回值为最后一个元素的值,key 不存在时返回 nil

基本语法:

RPOP key

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOP mylist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"

2.10 LSET

LSET 用于设置列表 keyindex 位置的元素值,当 index 超出列表索引范围时会返回错误 ERR ERR index out of range

基本语法:

LSET key index element

示例:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LSET mylist 0 "four"
"OK"
redis> LSET mylist -2 "five"
"OK"
redis> LRANGE mylist 0 -1
1) "four"
2) "five"
3) "three"

3. 应用场景

Redis List 提供了高效的列表结构操作,可以方便地进行数据的插入、删除和访问。

主要优点如下:

  • 快速的元素插入和删除:可以在列表的头部或尾部进行操作,时间复杂度为 O(1)
  • 可以作为队列或栈使用:支持 LPUSHLPOP 操作创建栈,支持 RPUSHBRPOP 操作创建队列。
  • 提供了块操作:可以一次性获取或删除多个元素,减少了网络往返时间。
  • 可以作为数据缓存:因为 Redis 是内存中的数据结构,可以作为高速缓存使用。

应用场景:

  • 数据缓存:通过推入或者弹出元素进行列表操作,并且可以实现分页查询。
  • 消息队列:生产者将消息推入列表,消费者从列表中拉取消息。
  • 简单排行榜:通过使用 SORT 命令可以根据分数来排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.计算机视觉—增广和迁移

目录 1.数据增广数据增强数据增强的操作代码实现2.微调 迁移学习 Transfer learning(重要的技术)网络结构微调:当目标数据集比源数据集小得多时,微调有助于提高模型的泛化能力。训练固定一些层总结代码实现1.数据增广 CES上的真实故事 有一家做智能售货机的公司,发现他们…

glif: 爆火 MeMe 生成器

glif 是一个 Agent 搭建平台&#xff0c;有人用其搭建了一个 MeMe 生成器, 短时间内已经有 280k 次使用&#xff01; 如图所示&#xff0c;glif 最大的特点是有一个实验性支持的 Canvas 节点&#xff0c;可以将生成的内容任意布局输出&#xff0c;提升了可控性。

7.计算机视觉—硬件和训练

目录 1.深度学习硬件:CPU和GPUCPU内存结构提升CPU利用率提升GPU利用率CPU与GPU牌子CPU/GPU高性能计算编程2.深度学习硬件:TPU和其他DSPFPGAAI ASIC总结3.单机多卡并行:多GPU数据并行VS模型并行总结4.多GPU训练代码实现数据同步数据分发训练多GPU的简洁实现5.分布式训练1.深度…

ICRA 2024 基于transformer大模型实现机器人自主导航

在陌生环境中进行导航的机器人需要提供决策&#xff1a;面向任务的导航&#xff08;到达设定好机器人目标点&#xff09;&#xff0c;以及 与任务无关的探索&#xff08;在新颖的环境中寻找目标&#xff09;。通常&#xff0c;这些角色由单独的模型处理&#xff0c;例如通过使用…

“北京到底有谁在啊”影视APP开发,解锁最简单的快乐

随着电视剧《玫瑰的故事》在腾讯视频APP热播&#xff0c;APP也增加了很多热度&#xff0c;一款丰富的影视APP&#xff0c;无论是热门大片、经典影视剧、还是最新综艺节目&#xff0c;能畅享无限精彩的影视内容&#xff01; 开发影视APP&#xff0c;需要专业的技术服务商来解决…

DM达梦数据库转换、条件函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【分布式系列】分布式锁在 Redis 主从部署中的挑战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ABAP ALV报表性能优化 经验总结

优化ALV报表&#xff0c;最主要就是优化取数逻辑和数据库查询。因为几乎在所有的程序中都会用到数据库查询&#xff0c;所以这篇文章的内容也不仅局限于SAP、ABAP程序&#xff0c;虽然ABAP有其特殊之处。 优化的时候我遵从以下几个原则&#xff1a; 1.把数据库连接视为一种极其…

Nginx常见的基本配置(全网最详细!!!)

&#x1fa81;Nginx常用命令 &#x1f3a8;Nginx正向代理 &#x1f94f;Nginx反向代理 &#x1f52e;Nginx负载均衡 &#x1f381;Nginx基本配置详解 ## # 全局配置 ##user www-data; ## 配置 worker 进程的用户和组 worker_processes auto; ## 配置 worke…

最新版Git安装指南使用指南

首先&#xff0c;访问Git的官方网站https://git-scm.com下载适用于您操作系统的安装包。您也可以选择使用阿里云镜像来加速下载过程。 也可以用国内地址下载https://pan.quark.cn/s/0293d76e58bchttps://pan.quark.cn/s/0293d76e58bc安装过程 在这里插入图片描述 2、点击“…

前缀和算法系列|概念讲解|应用场景|大量例题讲解

大家好,我是LvZi,今天带来前缀和算法系列|概念讲解|应用场景|大量例题讲解 一.模版解析 1.一维前缀和 一维前缀和就是一个简单的dp问题 状态表示:dp[i]:以i位置为结尾的所有元素的和状态转移方程:dp[i] dp[i - 1] arr[i] 链接:一维前缀和(模版题) 代码: import java.ut…

短信群发70字计费标准及内容编辑规范详解

短信群发营销&#xff0c;作为一种简单高效的推广方式&#xff0c;备受企业和个人青睐。然而&#xff0c;在启动短信群发营销前&#xff0c;了解相关常识同样重要。 一、短信字数限制与计费标准 短信群发时&#xff0c;字数限制是一个关键因素。每个汉字、字母、数字、符号均计…

虚拟机字节码执行引擎之运行时栈帧结构

概述 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定…

艺术与科技的精湛融合:探讨AI绘画与AI动画的交汇点

前言 艺术与科技的精湛融合&#xff1a;探讨AI绘画与AI动画的交汇点 在当代社会中&#xff0c;艺术和科技的结合呈现出了从来灭有的创新和可能性。随着人工智能技术的不断发展&#xff0c;AI绘画与AI动画的融合愈发引人瞩目。这一融合不仅给艺术家们带来了更多创作的可能&…

【项目实训】数据库内容丰富

经团队讨论&#xff0c;对前端页面展示数据进行了增加&#xff0c;于是相应的修改数据库 经团队成员使用大模型对各公司面试经验中问题的总结优化&#xff0c;我们打算将大模型的回答存储到数据库中&#xff0c;以显示在前端页面 于是在数据库中存储大模型的回答&#xff1a;…

什么是代码签名证书?有什么作用?

代码签名证书是一种特殊的数字证书&#xff0c;主要用于软件发布领域&#xff0c;旨在确保软件代码的完整性和来源的真实性。它是由可信赖的证书颁发机构&#xff08;CA&#xff09;签发的&#xff0c;为软件开发者提供了一种方式来证明其身份&#xff0c;并保证软件在发布后未…

科技未来·无限可能“2024世亚智博会”

随着科技的飞速发展&#xff0c;人类社会正以前所未有的速度迈向一个全新的时代。科学技术作为第一生产力&#xff0c;不仅极大地推动了经济和社会的发展&#xff0c;更在不断地改变着我们的生活方式和思维方式。特别是在人工智能、物联网等前沿科技领域&#xff0c;其创新和应…

酷开系统丨开启家庭智能教育让学习成为一种乐趣

在数字化时代&#xff0c;孩子们接触的信息日益增多&#xff0c;而酷开系统洞察到了家长对孩子成长环境的关切。酷开系统&#xff0c;作为家庭娱乐与教育的融合平台&#xff0c;不仅注重提供丰富的教育资源&#xff0c;更致力于创造一个健康、有益的学习和娱乐环境。 在酷开系…

当电力市场碰上量化分析技术,如何构建高效电力交易解决方案?

在数字化浪潮的推动下&#xff0c;物联网技术正重塑着各领域&#xff0c;电力交易市场亦不例外。作为能源市场的关键一环&#xff0c;电力交易的效率和透明度对于保障能源系统的稳定运行和可持续发展具有重要意义。物联网技术的兴起为电力交易市场带来了精细化资源管理的新机遇…

KaiwuDB 事务中的 Raft 协议

01 Raft 概述 KaiwuDB 的事务是通过使用 Raft 协议来实现数据的一致性。Raft 协议是一种经典的分布式一致性算法&#xff0c;它的主要特征有&#xff1a; 选举唯一的 Leader 处理读写请求并创建新的 Raftlog&#xff0c;其它节点作为 Follower 接收 Leader 同步的 Raftlog&am…