前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Redis】Redis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )

【Redis】Redis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )

作者头像
韩曙亮
发布2023-03-30 19:09:14
发布2023-03-30 19:09:14
6.4K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、List 列表简介


在 Redis 中 , 通过 一个 键 Key , 可以 存储多个值 , 这些值存放在一个 List 列表中 ;

List 列表 是 字符串列表 , 元素类型是 字符串 ;

Redis 中的 List 列表 本质是 双向链表 , 可以将 字符串元素 添加到 列表的头部 或 尾部 ;

列表 对于 两端 的 操作 性能较高 , 对于 通过 索引小标 查询 元素的 性能较低 ;

  • 插入元素 效率较高 ;
  • 查询元素 效率较低 ;

Redis 中的 List 列表 , 底层由 快速链表 QuickList 实现 ;

  • 如果列表中 元素个数较少 , 则会被分配一块 连续的内存结构 , 该结构是 ZipList 压缩列表 ;
  • 如果列表中 元素个数较大 , 无法分配连续的内存空间 , 列表中只存储指针信息 , 指向元素的实际内存空间 ;
    • 同时还有 指向 前一个元素 和 后一个元素的 指针 ;

快速链表 是 链表 和 压缩列表 结合起来的产物 ;

二、查询操作


1、根据下标获取元素

根据下标获取元素 : 获取从 start 索引开始 , 到 stop 索引结束的元素值 ;

代码语言:javascript
代码运行次数:0
运行
复制
lrange key start stop
  • key : 键 ;
  • start : 元素的起始索引值 ;
  • stop : 元素的终止索引值 ;

如果要 查询 键 对应的 List 列表值 , 使用

代码语言:javascript
代码运行次数:0
运行
复制
lrange key 0 -1

命令即可 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
4) "123"
127.0.0.1:6379> lrange name 0 2
1) "Jerry"
2) "Tom"
3) "abc"
127.0.0.1:6379>

2、获取指定下标索引的元素

执行

代码语言:javascript
代码运行次数:0
运行
复制
lindex key index

命令 , 可以 获取 key 列表 index 索引的值 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
127.0.0.1:6379> lindex name 2
"abc"
127.0.0.1:6379>
127.0.0.1:6379>

3、获取列表长度

执行

代码语言:javascript
代码运行次数:0
运行
复制
llen key

命令 , 可以 获取 key 列表 的长度 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
127.0.0.1:6379> len name
(error) ERR unknown command 'len'
127.0.0.1:6379>
127.0.0.1:6379> llen name
(integer) 3
127.0.0.1:6379>

三、增操作


1、插入值

插入值 :

  • 从左侧插入值 : 从左边开始放数据 , value2 在 value1 左边 , value3 在 value2 左边 ;
代码语言:javascript
代码运行次数:0
运行
复制
	lpush key value1 value2 value3 ...
  • 从右侧插入值 : 从右边开始放数据 , value2 在 value1 右边 , value3 在 value2 右边 ;
代码语言:javascript
代码运行次数:0
运行
复制
	rpush key value1 value2 value3 ...

如果要 查询 键 对应的 List 列表值 , 使用

代码语言:javascript
代码运行次数:0
运行
复制
lrange key 0 -1

命令即可 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lpush name Tom Jerry Jack
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "Jack"
2) "Jerry"
3) "Tom"
127.0.0.1:6379>
127.0.0.1:6379> rpush name abc 123 456
(integer) 6
127.0.0.1:6379> lrange name 0 -1
1) "Jack"
2) "Jerry"
3) "Tom"
4) "abc"
5) "123"
6) "456"
127.0.0.1:6379>

2、在指定元素前后插入值

执行

代码语言:javascript
代码运行次数:0
运行
复制
linsert key before/after value newValue

命令 , 可以 在 key 列表 的 value 值 前面 / 后面 插入新值 newValue ;

代码示例 : 在 age 列表中 , 元素 18 之前 , 插入值 110 ;

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "18"
3) "17"
4) "16"
127.0.0.1:6379> linsert age before 18 110
(integer) 5
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "110"
3) "18"
4) "17"
5) "16"
127.0.0.1:6379>

四、删操作


1、移除值

移除值 :

  • 从左侧移除值 : 从 List 列表左侧移除一个值 , 如果所有的值都被移除 , 则 键 Key 也随之消亡 ;
代码语言:javascript
代码运行次数:0
运行
复制
	lpop key
  • 从右侧移除值 : 从 List 列表右侧移除一个值 , 如果所有的值都被移除 , 则 键 Key 也随之消亡 ;
代码语言:javascript
代码运行次数:0
运行
复制
	rpop key

如果要 查询 键 对应的 List 列表值 , 使用

代码语言:javascript
代码运行次数:0
运行
复制
lrange key 0 -1

命令即可 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange name 0 -1
1) "Jack"
2) "Jerry"
3) "Tom"
4) "abc"
5) "123"
6) "456"
127.0.0.1:6379>
127.0.0.1:6379> lpop name
"Jack"
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
4) "123"
5) "456"
127.0.0.1:6379> rpop name
"456"
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
4) "123"
127.0.0.1:6379>

2、删除列表指定个数的指定值

执行

代码语言:javascript
代码运行次数:0
运行
复制
lrem key n value

命令 , 可以 在 key 列表 中 删除左侧的 n 个 value 值 ;

代码示例 : 在 age 列表中 , 删除左侧的 2 个 18 元素 , 这里只有一个 18 元素 , 直接删除 ;

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "110"
3) "18"
4) "17"
5) "16"
127.0.0.1:6379>
127.0.0.1:6379> lrem age 2 18
(integer) 1
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "110"
3) "17"
4) "16"
127.0.0.1:6379>

五、修改操作


1、多列表操作

执行

代码语言:javascript
代码运行次数:0
运行
复制
rpoplpush key1 key2

命令 , 可以 从 key1 列表右边取出一个值 , 放在 key2 列表的左边 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange age 0 -1
1) "18"
2) "17"
3) "16"
127.0.0.1:6379> lrange name 0 -1
1) "Jerry"
2) "Tom"
3) "abc"
4) "123"
127.0.0.1:6379>
127.0.0.1:6379> rpoplpush name age
"123"
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "18"
3) "17"
4) "16"
127.0.0.1:6379>

2、设置列表指定索引的值

执行

代码语言:javascript
代码运行次数:0
运行
复制
lset key index value

命令 , 可以 在 key 列表 中 将 第 index 索引位置 的 元素 替换为 value 值 ;

代码示例 : 在 age 列表中 , 将第 2 个元素替换成 888 值 ;

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "110"
3) "17"
4) "16"
127.0.0.1:6379> lset age 2 888
OK
127.0.0.1:6379> lrange age 0 -1
1) "123"
2) "110"
3) "888"
4) "16"
127.0.0.1:6379>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、List 列表简介
  • 二、查询操作
    • 1、根据下标获取元素
    • 2、获取指定下标索引的元素
    • 3、获取列表长度
  • 三、增操作
    • 1、插入值
    • 2、在指定元素前后插入值
  • 四、删操作
    • 1、移除值
    • 2、删除列表指定个数的指定值
  • 五、修改操作
    • 1、多列表操作
    • 2、设置列表指定索引的值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档