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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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应用—2.在列表数据里的应用
本文介绍了基于数据库和缓存双写的分享贴功能设计,包括:基于数据库 + 缓存双写的分享贴功能、查询分享贴列表缓存时的延迟构建、分页列表惰性缓存方案、用户分享贴列表数据按页缓存实现精准过期控制、用户分享贴列表的分页缓存异步更新、数据库与缓存的分页数据一致性方案、热门用户分享贴列表的分页缓存失效时消除并发线程串行等待锁的影响。总结:该设计通过合理的缓存策略和异步处理机制,有效提升了系统性能,降低了内存占用,并确保了数据的一致性和高可用性。
Redis应用—2.在列表数据里的应用
|
3月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
59 9
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
90 14
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
175 10
|
4月前
|
索引 Python
List(列表)
List(列表)。
82 4
|
4月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
4月前
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
318 2
|
5月前
|
NoSQL 关系型数据库 MySQL
Redis 列表(List)
10月更文挑战第16天
68 2
|
5月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
73 2
|
4月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
156 0