2024 RedisAnd Mysql基础与进阶操作系列(16-3)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis数据类型之List类型语法格式说明表及LPUSH/LPUSHX/LRANGE、LPOP/LLEN、LREM/LSET/LINDEX/LTRIM、LINSERTRPUSH/RPUSHX/RPOP/RPOPLPUSH等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

欢迎各位彦祖与热巴畅游本人专栏与博客

你的三连是我最大的动力

以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]

专栏跑道一

➡️网络空间安全——全栈前沿技术持续深入学习

image.gif

专栏跑道二

➡️ 24 Network Security -LJS

image.gif

image.gif

image.gif

专栏跑道三


➡️ MYSQL REDIS Advance operation

image.gif

专栏跑道四

➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]

image.gif

专栏跑道五

➡️RHCE-LJS[Linux高端骚操作实战篇]

image.png

专栏跑道六

➡️数据结构与算法[考研+实际工作应用+C程序设计]

image.gif

专栏跑道七

➡️RHCSA-LJS[Linux初级及进阶骚技能]

image.gif

image.gif

上节回顾



Redis数据类型之List类型及操作

1.List类型及操作

简介

  • 在Redis中,List类型是的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部 (right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。
  • 与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。 List中可以包含的最大元素数量是 4294967295。
  • 从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成
  • 然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。

2.相关命令列表 [重在融汇贯通和如何快速运用]

2.1List命令语法格式及说明表一

Hash语法及列表及类型表一

命令原型 时间复杂度 命令描述 返回值
LPUSH key value [value ...] O(1)
  • 在指定Key所关联的List Value的头部插入参数中给出 的所有Values。

  • 如果该Key不存在,该命令将在插入之前创建一个与该Key关联的空链表,之后再将数据 从链表的头部插入。

  • 如果该键的Value不是链表类 型,该命令将返回相关的错误信息
插入后链表中元素的 数量
LPUSHX key value O(1)
  • 仅有当参数中指定的Key存在时,该命令会在其所关联的List Value的头部插入参数中给出的Value,否则将不会有任何操作发生
插入后链表中元素的数量
LRANGE key start stop O(S+N)
  • 时间复杂度中的S为start参数表示的偏移量,N表示 元素的数量。该命令的参数 start和end都是0- based。

  • 即0表示链表头部(leftmost)的第一个元素。 其中start的值也可以为负值,-1将表示链表中的最后一个元素,即尾部元素,-2表示倒数第二个并以此类推。

  • 该命令在获取元素时,start和end位置上的元素 也会被取出。

  • 如果start的值大于链表中元素的数量,空链表将会被返回。

  • 如果end的值大于元素的数 量,该命令则获取从start(包括start)开始,链表中剩余的所有元素
返回指定范围内元素的列表
LPOP key O(1)
  • 返回并弹出指定Key关联的链表中的第一个元素,即头部元素。

  • 如果该Key不存,返回nil
链表头部的元素
LLEN key O(1)
  • 返回指定Key关联的链表中元素的数量

  • 如果该Key不 存在,则返回0。

  • 如果与该Key关联的Value的类型不 是链表,则返回相关的错误信息
链表中元素的数量
LREM key count value O(N)
  • 时间复杂度中N表示链表中元素的数量。

  • 在指定Key 关联的链表中,删除前 count个值等于value的元 素。如果count大于0,从头向尾遍历并删除

  • 如果count小于0,则从尾向头遍历并删除。

  • 如果count等 于0, 则删除链表中所有等于value的元素。如果指定 的Key不存在,则直接返回0
链表中元素的数量
LSET key index value O(N)
  • 时间复杂度中N表示链表中元素的数量。但是设定头 部或尾部的元素时,其时间复杂度为O(1)。

  • 设定链表中指定位置的值为新值,其中0表示第一个元素,即头部元素,-1表示尾部元素。

  • 如果索引值Index超出 了链表中元素的数量范围,该命令将返回相关的错误信息

2.1List命令语法格式及说明表二

List语法及类型表二

命令原型 时间复杂度 命令描述 返回值
LINDEX key index O(N)

时间复杂度中N表示在找到该元素时需要遍历的元素 数量。对于头部或尾部元素,其时间复杂度为O(1)。

该命令将返回链表中指定位置(index)的元素,index 是0-based,表示头部元素,如果index为-1,表示尾部元素。

如果与该Key关联的不是链表,该命令将返回相关的错误信息

返回请 求的元 素

如果index超出范围,则返回 nil

LTRIM key start stop O(N)

在指定Key所关联的List Value的尾部插入参数中给出的所有Values。

如果该Key不存在,该命令将在插入之前创建一个与该Key关联的空链表,之后再将数据 从链表的尾部插入。

如果该键的Value不是链表类 型,该命令将返回相关的错误信息

LINSERT key BEFORE|AFTER pivot value O(N)

仅有当参数中指定的Key存在时,该命令才会在其所关联的List Value的尾部插入参数中给出的Value,否则将不会有任何操作发生

成功插入后链表中元素的数量

如果没有找到 pivot, 返回-1, 如果 key不存在, 返回 0。

RPUSH key value [value ...] O(N)

在指定Key所关联的List Value的尾部插入参数中给出的所有Values。

如果该Key不存在,该命令将在插入之前创建一个与该Key关联的空链表,之后再将数据从链表的尾部插入。

如果该键的Value不是链表类 型,该命令将返回相关的错误信息

插入后链表中元素的数量
RPUSHX key value O(N)

仅有当参数中指定的Key存在时,该命令才会在其所关联的List Value的尾部插入参数中给出的Value,否则将不会有任何操作发生

插入后链表中元素的数量
RPOP key O(1)

返回并弹出指定Key关联的链表中的最后一个元素, 即尾部元素

如果该Key不存,返回nil

链表尾部的元素
RPOPLPUSH source destination O(1)

原子性的从与source键关联的链表尾部弹出一个元 素,同时再将弹出的元素插入 到与destination键关联的链表的头部。

如果source键不存在,该命令将返 回nil,同时不再做任何其它的操作了。

如果source和 destination是同一个键,则相当于原子性的将其关联 链表中的尾部元素移到该链表的头部

返回弹出和插入的元素

三.List类型及操作命令举例

1. LPUSH/LPUSHX/LRANGE:

  • 在Shell提示符下启动redis客户端工具
/>redis-cli
redis 127.0.0.1:6379>del mykey
(integer) 1
  • image.gif
  • mykey键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入
redis 127.0.0.1:6379>lpush mykey a b c d
(integer) 4
  • image.gif
  • 取从位置0开始到位置2结束的3个元素
redis 127.0.0.1:6379> lrange mykey 0 2
1) "d"
2) "c"
3) "b"
  • image.gif
  • 取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素
redis 127.0.0.1:6379> lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
  • image.gif
  • mykey2键此时并不存在,因此该命令将不会进行任何操作,其返回值为0
redis 127.0.0.1:6379> lpushx mykey2 e
(integer) 0
  • image.gif
  • 可以看到mykey2没有关联任何List Value。
redis 127.0.0.1:6379>lrange mykey2 0 -1
(empty list or set)
  • image.gif
  • mykey键此时已经存在,所以该命令插入成功,并返回链表中当前元素的数量
redis 127.0.0.1:6379> lpushx mykey e
(integer) 5
  • image.gif
  • 获取该键的List Value的头部元素
redis 127.0.0.1:6379> lrange mykey 0 0
1) "e"
  • image.gif

2. LPOP/LLEN

redis 127.0.0.1:6379>lpush mykey a b c d
(integer) 4
redis 127.0.0.1:6379>lpop mykey
"d"
redis 127.0.0.1:6379>lpop mykey
"c"
  • image.gif
  • 在执行lpop命令两次后,链表头部的两个元素已经被弹出,此时链表中元素的数量是
redis 127.0.0.1:6379>llen mykey
(integer) 2
  • image.gif

3. LREM/LSET/LINDEX/LTRIM

  • 为后面的例子准备测试数据
redis 127.0.0.1:6379>lpush mykey a b c d a c
(integer) 6
  • image.gif
  • 从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量
redis 127.0.0.1:6379> lrem mykey 2 a
(integer) 2
  • image.gif
  • 看出删除后链表中的全部元素
redis 127.0.0.1:6379> lrange mykey 0 -1
1) "c"
2) "d"
3) "c"
4) "b
  • image.gif
  • 获取索引值为1(头部的第二个元素)的元素值
redis 127.0.0.1:6379> lindex mykey 1
"d"
  • image.gif
  • 将索引值为1(头部的第二个元素)的元素值设置为新值e
redis 127.0.0.1:6379> lset mykey 1 e
OK
  • image.gif
  • 查看是否设置成功
redis 127.0.0.1:6379> lindex mykey 1
"e"
  • image.gif
  • 索引值6超过了链表中元素的数量,该命令返回nil
redis 127.0.0.1:6379> lindex mykey 6
(nil)
  • image.gif
  • 设置的索引值6超过了链表中元素的数量,设置失败,该命令返回错误信息
redis 127.0.0.1:6379>lset mykey 6 hh
(error) ERR index out of range
  • image.gif
  • 仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留
redis 127.0.0.1:6379> ltrim mykey 0 2
OK
  • image.gif
  • 查看trim后的结果
redis 127.0.0.1:6379> lrange mykey 0 -1
1) "c"
2) "e"
3) "c"
  • image.gif

4. LINSERT

  • 删除该键便于后面的测试
redis 127.0.0.1:6379> del mykey
(integer) 1
  • image.gif
  • 为后面的例子准备测试数据
redis 127.0.0.1:6379>lpush mykey a b c d e
(integer) 5
  • image.gif
  • 在a的前面插入新元素a1
redis 127.0.0.1:6379> linsert mykey before a a1
(integer) 6
  • image.gif
  • 查看是否插入成功,从结果看已经插入。注意lindex的index值是0-based
redis 127.0.0.1:6379>lindex mykey 0
"e"
  • image.gif
  • 在e的后面插入新元素e2,从返回结果看已经插入成功
redis 127.0.0.1:6379> linsert mykey after e e2
(integer) 7
  • image.gif
  • 再次查看是否插入成功
redis 127.0.0.1:6379> lindex mykey 1
"e2"
  • image.gif
  • 在不存在的元素之前或之后插入新元素,该命令操作失败,并返回-1
redis 127.0.0.1:6379>linsert mykey after k a
(integer) -1
  • image.gif
  • 为不存在的Key插入新元素,该命令操作失败,返回0
redis 127.0.0.1:6379> linsert mykey1 after a a2
(integer) 0
  • image.gif

5.RPUSH/RPUSHX/RPOP/RPOPLPUSH

  • 删除该键,便于后面的测试
redis 127.0.0.1:6379> del mykey
(integer) 1
  • image.gif
  • 从链表的尾部插入参数中给出的values,插入顺序是从左到右依次插入
redis 127.0.0.1:6379>rpush mykey a b c d
(integer) 4
  • image.gif
  • 通过lrange的可以获悉rpush在插入多值时的插入顺序
redis 127.0.0.1:6379> lrange mykey 0 -1
1) "a"
  • image.gif


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(17)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
如何通过php和python客户端来操作Redis数据库等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis之Nosql数据库分类、存储类型、特点;Redis 作用、与其他库的对比、使用场景以及如何部署、安装等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
SQL 存储 NoSQL
2024Mysql And Redis基础与进阶操作系列(12)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MYSQL之如何开启、提交、回滚事务和MYSQL事务特性等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
2024Mysql And Redis基础与进阶操作系列(12)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
|
1月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MYSQL日志之详解如何配置查看二进制、查询及慢查询日志;备份与恢复等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
1月前
|
存储 人工智能 算法
2024重生之回溯数据结构与算法系列学习(7)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人数据结构与算法系列学习之队列的基本概念、如何判断队列已满/已空、队列的链式存储结构[头的出入队]、双端队列、中缀、后缀、前缀表达式、特殊矩阵和一二维数组的压缩储存等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(15)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
2024全网最全切最为详细的Redis库配置;你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽
|
1月前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(16-4)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之Set类型及相关命令如:SADD/SMEMBERS/SCARD/SISMEMBER、SPOP/SREM/SRANDMEMBER/SMOVE、SDIFF/SDIFFSTORE/SINTER/SINTERSTORE 等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(16-2)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之Hash类型及NCR/DECR/INCRBY/DECRBY、 GETSET、SETNX、SETRANGE/GETRANGE、SETBIT/GETBIT、MSET/MGET/MSETNX等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

相关产品

  • 云数据库 RDS MySQL 版