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

本文涉及的产品
云原生内存数据库 Tair,内存型 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
相关文章
|
24天前
|
消息中间件 NoSQL Redis
redis数据结构-List
redis数据结构-List
30 1
|
10天前
|
消息中间件 存储 NoSQL
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
47 20
剖析 Redis List 消息队列的三种消费线程模型
|
1月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
2月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
2月前
|
存储 NoSQL 容灾
Redis问题之压缩列表zipList在Redis中有哪些应用场景
Redis问题之压缩列表zipList在Redis中有哪些应用场景
|
6天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
26天前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
|
22天前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
48 0
|
26天前
|
缓存 NoSQL Redis
【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET (15000ms)
【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET (15000ms)
|
26天前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务