Redis基本数据类型 List(列表)基本使用

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis基本数据类型 List(列表)基本使用

List(列表)

list使用场景:可以把它用作成栈(lpush rpop左边进去 右边出来),队列,阻塞队列 ,消息排队,消息队列(lpush rpop)

所以的list命令都是以"l(L)"开头的

  1 lpush  lpush (list) (v1)(v2)(v3)  从左边一次性或者多次插入.也就是头部

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个新的list的list一次性添加三个值
(integer) 3 #返回当前这个list里面有几个元素
127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部)
1) "3"
2) "2"
3) "1"
127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1)
1) "3"
2) "2"
127.0.0.1:6379[2]> lrange list 0 2 #查看最后三个个元素(0,1,2)
1) "3"
2) "2"
3) "1"
127.0.0.1:6379[2]> lrange list 0 0 #查看最后一个元素
1) "3"

2 lrange  Lrange key (index)(index)  获取指定区间的值,去如果是0,-1的话就是查看全部的 想要得到第一个元素使用0 0

127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部)
1) "3"
2) "2"
3) "1"
127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1)
1) "3"
2) "2"
127.0.0.1:6379[2]> lrange copylist 0 0  #查看第一个元素
1) "wyh4"

3 rpush  r(right)push (list)(v1)(v2)(v3)从右边一次性或者多次插入.也就是尾部

127.0.0.1:6379[2]> rpush list four #给list从右边添加"four"这个元素
(integer) 4
127.0.0.1:6379[2]> rpush list five  #给list从右边添加"five"这个元素
(integer) 5
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的list
1) "3"
2) "2"
3) "1"
4) "four"
5) "five"

4 lpop lpop(list)从左边删除一个值

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list
(integer) 3 
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值
1) "3"
2) "2"
3) "1"
127.0.0.1:6379[2]> lpop list # 从左边删除一个值
"3"
127.0.0.1:6379[2]> rpop list #从右边删除一个值
"1"
127.0.0.1:6379[2]> lrange list 0 -1  #查看全部的值
1) "2"

5 rpop rpop(list)从右边删除一个值

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list    
(integer) 3 
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值
1) "3"
2) "2"
3) "1"
127.0.0.1:6379[2]> lpop list # 从左边删除一个值
"3"
127.0.0.1:6379[2]> rpop list #从右边删除一个值
"1"
127.0.0.1:6379[2]> lrange list 0 -1  #查看全部的值
1) "2"

6 lindex index(list)(index)  通过下标获取值,注意,下标也是从0开始的

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值
1) "3"
2) "2"
3) "1"
4) "2"
127.0.0.1:6379[2]>  lindex list 0 #查看左边第一个值
"3"
127.0.0.1:6379[2]>  lindex list 1 #查看左边第二个值
"2"

7 llen llen(list) 查看元素的长度

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素
1) "3"
2) "2"
3) "1"
4) "2"
127.0.0.1:6379[2]> llen list #查看元素的长度
(integer) 4

8 lrem

lrem(list)(count)(value)移除几个什么样的元素(精确匹配)

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素
1) "3"
2) "2"
3) "1"
4) "2"
127.0.0.1:6379[2]> lrem list 1 1 #移除1个值为1的元素
(integer) 1 
127.0.0.1:6379[2]> lrem list 2 2  #移除2个值为2的元素
(integer) 2
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素
1) "3"

9 ltrim ltrim(list)(index)(index)在java中是修剪,在redis是截取的意思,通过下标截取某一段key的元素,但是会改变这个list,只剩下我们要截取的元素

127.0.0.1:6379[2]> lpush list 1 2 3 4 5 #创建元素
(integer) 5
127.0.0.1:6379[2]> lrange list 0 -1 #查看元素
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379[2]> ltrim list 0 1 #截取key为list的元素,从第一位截取到第二位
OK
127.0.0.1:6379[2]> lrange list 0 -1 #查看元素
1) "5"
2) "4"

10 rpoplpush  rpoplpush(list1)(list2)  移出列表的最后一个元素,将它移动到新的列表

127.0.0.1:6379[2]> rpush list wyh1 wyh2 wyh3 #创建一个listy一次性添加多个值
(integer) 3
127.0.0.1:6379[2]> rpoplpush list copylist #复制一个list命名为copylist 
"wyh3"
127.0.0.1:6379[2]> lrange copylist 0 -1 #查看copylist的元素
1) "wyh3"
127.0.0.1:6379[2]> lrange list 0 -1 #查看list的元素
1) "wyh1"
2) "wyh2"

11 exists  exists(list)  判断list是否存在 存在返回1 不存在返回0

127.0.0.1:6379[2]> exists list #判断list这个列表是否存在
(integer) 1     #存在返回1 不存在返回0
127.0.0.1:6379[2]> exists list1 #判断list1这个列表是否存在
(integer) 0    #存在返回1 不存在返回0

12 lset lset(list)(index)(value)  相当于修改替换replace   将列表中指定下标的值替换成另外一个值,如果不存在会报错,存在会替换当前值

127.0.0.1:6379[2]> lset list 0 item #把list这个列表第0个下表的值替换成item
(error) ERR no such key #因为list这个列表不存在或者list这个列表没有值
127.0.0.1:6379[2]> lpush list value1 #给list这个列表进行赋值
(integer) 1
127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值
1) "value1"
127.0.0.1:6379[2]> lset list 0 item #将list这个列表中的下标为0的值替换成item
OK
127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值
1) "item"
127.0.0.1:6379[2]> lrange list 1 value2 #将list这个列表中的下标为1的值替换成value
(error) ERR value is not an integer or out of range ##因为llist这个列表没有下标为1的值

13 linsert  linsert(key)(before前或者after后)(value)(value)  将某个具体的value插入列表中某个元素的前面或者后面,在list里面之前value位置(之前或者之后)插入另外一个value的元素

127.0.0.1:6379[2]> lpush list 1 2 3 #创建list集合
(integer) 3
127.0.0.1:6379[2]> linsert list before 2 0 #在list里面value为2之前插入一个value为0的元素
(integer) 4
127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素
1) "3"
2) "0"
3) "2"
4) "1"
127.0.0.1:6379[2]> linsert list after 2 0 #在list里面value为2之后插入一个value为0的元素
(integer) 5
127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素
1) "3"
2) "0"
3) "2"
4) "0"
5) "1"

list小结

1 list实际上是一个链表,before node after,left,right都可以插入值

2 如果插入的这个key不存在,需要创建一个新的链表

3 如果key存在,就在它的基础上新增内容

4 如果移出了key,所有的value都消失了,如果移除了所有值,空链表,也代表不存在

5 在两边插入或者改动值,效率最高,如果执行对中间元素的处理,效率会比较低

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
6天前
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
138 2
|
15天前
|
NoSQL 关系型数据库 MySQL
Redis 列表(List)
10月更文挑战第16天
13 2
|
18天前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
36 2
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
NoSQL 关系型数据库 Redis
Redis命令——列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
858 0
|
NoSQL Redis 索引
redis必杀命令:列表(List)
题记: Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
831 0
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
|
27天前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
66 6
|
4天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
49 22