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

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

本系列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.rhkb.cn/news/361785.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab量子纠缠态以及量子门操作下的量子态

前言 今天我们来聊聊题外话&#xff0c;量子纠缠&#xff0c;在目前物理分支中&#xff0c;要说最深&#xff0c;最能改变人类对宇宙影响的莫过于量子力学了&#xff0c;假如我们可以人为的对两个粒子施加纠缠态&#xff0c;那么我们将可以足不出户的完成对外界的操控 简介 …

三丰云免费虚拟主机及免费云服务器评测

三丰云是一家知名的云计算服务提供商&#xff0c;其免费虚拟主机和免费云服务器备受用户好评。为了更好地了解三丰云的服务质量&#xff0c;我们进行了详细的评测。首先&#xff0c;三丰云的免费虚拟主机提供稳定可靠的性能&#xff0c;让用户可以轻松搭建自己的网站。其免费云…

【博客719】时序数据库基石:LSM Tree的增删查改

时序数据库基石&#xff1a;LSM Tree的增删查改 LSM结构 LSM树将任何的对数据操作都转化为对内存中的Memtable的一次插入。Memtable可以使用任意内存数据结构&#xff0c;如HashTable&#xff0c;BTree&#xff0c;SkipList等。对于有事务控制需要的存储系统&#xff0c;需要在…

ChatGPT在程序开发中的应用:提升生产力的秘密武器

在当今飞速发展的科技时代&#xff0c;程序开发已经成为许多企业和个人必不可少的技能。然而&#xff0c;编写代码并非总是顺风顺水&#xff0c;面对复杂的算法、繁琐的调试、持续不断的需求变更&#xff0c;程序员们常常感到压力山大。在这种情况下&#xff0c;ChatGPT应运而生…

Python数据分析之-Oracle数据库连接

文章目录 cx_Oracle 介绍cx_Oracle运行原理cx_Oracle 安装linux环境安装windows环境安装 cx_Oracle 使用单独使用结合Pandas使用 参考资料 cx_Oracle 介绍 cx_Oracle 8是一个Python扩展模块&#xff0c;它提供了对Oracle数据库的访问能力。以下是cx_Oracle 8的一些关键特性和功…

Superagent:一个开源的AI助手框架与API

在人工智能日益普及的今天,如何将AI助手无缝集成到应用中成为了开发者们关注的焦点。今天,我们要介绍的Superagent正是一个为这一需求量身打造的开源框架与API。它结合了LLM、检索增强生成(RAG)和生成式AI技术,为开发者们提供了一个强大而灵活的解决方案。 一、Superagen…

获取个人免费版Ubuntu Pro

首先上官网地址&#xff1a;Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”&#xff0c;在此页面中Ubuntu说明了该版本只面向个人开发者&#xff0c;且最终只允许5台设备免费使用&#xff1b;因而部署设备的抉择就不得不慎重考虑了&am…

【js + ckeditor】插入base64格式的图片

一、需求说明 直接把图片转成base64插入到富文本 二、需求分析 1、富文本图片格式处理位置 在ckeidtor的目录下有个plugins文件夹&#xff0c;在plugins下新建一个文件夹&#xff08;自己命名&#xff0c;如simpleupload&#xff09;&#xff0c;进入simpleupload文件夹&…

【Java Web】XML格式文件

目录 一、XML是什么 二、常见配置文件类型 *.properties类型&#xff1a; *.xml类型&#xff1a; 三、DOM4J读取xml配置文件 3.1 DOM4J的使用步骤 3.2 DOM4J的API介绍 一、XML是什么 XML即可扩展的标记语言&#xff0c;由标记语言可知其基本语法和HTML一样都是由标签构成的文件…

安卓直装植物大战僵尸杂交版V2.1版完美运行

安卓直装植物大战僵尸杂交版V2.1版完美运行 链接&#xff1a;https://pan.baidu.com/s/1SPFouV8T-AV2LnUoZfy6lQ?pwd3gl6 提取码&#xff1a;3gl6

【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解

最终效果 文章目录 最终效果前言存储位置信息存储更多数据存储场景信息持久化存储数据完结 前言 前面写过小型游戏存储功能&#xff1a; 【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解&#xff08;包含数据安全处理方案的加密解密&#xff09; 这次做一…

告别数据线!轻松实现iOS和安卓设备间的文件共享

用 AirDroid 的附近传输功能&#xff0c;完全免费&#xff0c;几十个G的文件也可以相互传输。不限制iPhone和iPad数量&#xff0c;多个设备同时登录也不会强迫下线。 当你要在苹果手机和安卓手机之间传输文件&#xff0c;请将AirDroid安装到两台手机上&#xff0c;然后登录同一…

搞定求职难题:工作岗位列表+简历制作工具 | 开源专题 No.75

SimplifyJobs/New-Grad-Positions Stars: 8.5k License: NOASSERTION 这个项目是一个用于分享和跟踪美国、加拿大或远程职位的软件工作机会列表。该项目的核心优势和关键特点如下&#xff1a; 自动更新新岗位信息便捷地提交问题进行贡献提供一键申请选项 BartoszJarocki/cv…

从0到1实现LLM学习笔记附录B(GPT-4o翻译版)

来源&#xff1a;https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

通过混合栅极技术改善p-GaN功率HEMTs的ESD性能

来源&#xff1a;Improved Gate ESD Behaviors of p-GaN PowerHEMTs by Hybrid Gate Technology&#xff08;ISPSD 24年&#xff09; 摘要 本工作中&#xff0c;首次证明了混合栅极技术在不增加额外面积和寄生效应的前提下&#xff0c;能有效提升p-GaN HEMTs的栅极静电放电(E…

5G赋能安防视频监控:EasyCVR视频汇聚融合创新技术,共筑多场景安全防线

随着科技的快速发展&#xff0c;第五代移动通信技术&#xff08;5G&#xff09;已逐渐成为我们生活中的重要组成部分。其中&#xff0c;5G技术以其超高速、低延迟、大连接数的特点&#xff0c;正在深刻改变着我们的生活方式和社会运行模式。安防监控领域作为社会安全的重要组成…

Web Worker 学习及使用

了解什么是 Web Worker 提供了可以在后台线程中运行 js 的方法。可以不占用主线程&#xff0c;不干扰用户界面&#xff0c;可以用来执行复杂、耗时的任务。 在worker中运行的是另一个全局上下文&#xff0c;不能直接获取 Window 全局对象。不同的 worker 可以分为专用和共享&…

Golang | Leetcode Golang题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; func numIslands(grid [][]byte) int {res : 0for i : 0; i < len(grid); i {for j : 0; j < len(grid[i]); j {if grid[i][j] 1 {resdfs(grid, i, j)}}}return res }func dfs(grid [][]byte, r, c int) {h, w : len(grid), len(gri…

ElasticSearch索引架构与存储

关于ES官网的介绍: Elasticsearch provides near real-time search and analytics for all types of data. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch can efficiently store and index it in a way that support…

python--序列化模块json与pickle

什么叫序列化&#xff1f; 将原本的字典、列表等内容转换成一个字符串的过程就 叫做序列化。 多用的两个序列化模块&#xff1a;json与pickle json&#xff0c;用于字符串 和 python数据类型间进行转换 pickle&#xff0c;用于python特有的类型 和 python的数据类型间进行转换 …