ITPub博客

首页 > 数据库 > 数据库开发技术 > Redis干货 | 五种常用类型之List集合类型详解

Redis干货 | 五种常用类型之List集合类型详解

原创 数据库开发技术 作者:Finally_m 时间:2023-03-01 08:05:04 0 删除 编辑
关注Java架构栈,干货天天都不断哦!

一. 背景说明

小白:伟哥,java中的List集合类型在Redis中有对应的存储吗?

伟哥:有的,我带你撸一波。

二. 概述

Redis的List列表是双向链表结构,经常用于实现堆栈和队列。双向链表结构在存储时,有一个前结点,有一个后结点。

一个列表的最大长度可放2^32-1(4294967295)个元素。

三. 插入命令

插入命令,分为左插入和右插入及指定元素插入,如下图:

操作及解释如下:

#从左插入,没有则新建,正确结果是Lists的长度
192.168.65.15:6379> lpush nums 1 2 3   
(integer) 3

#lrange k  0 -1 查看所有元素
192.168.65.15:6379> lrange nums 0 -1  
1) "3"
2) "2"
3) "1"

#lpushx k v  插入已存在的key
192.168.65.15:6379> lpushx nums 4   
(integer) 4

192.168.65.15:6379> lrange nums 0 -1
1) "4"
2) "3"
3) "2"
4) "1"

#lpushx k v  如果key不存在,则返回0
192.168.65.15:6379> lpushx numss 5    
(integer) 0

192.168.65.15:6379> lrange numss 0 -1
(empty list or set)

#rpush 右插入
192.168.65.15:6379> rpush nums a b c  
(integer) 7

192.168.65.15:6379> lrange nums 0 -1  
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"

#右插入  如果key存在,返回Lists的长度
192.168.65.15:6379> rpushx nums d  
(integer) 8

192.168.65.15:6379> lrange nums 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"
8) "d"

除上述插入外,还有一个插入命令,如下:

操作及解释如下:

#num1的数据
192.168.65.15:6379> rpush num1 1 2 3  
(integer) 3

#num2的数据
192.168.65.15:6379> rpush num2 4 5 6 
(integer) 3

#把num1最后一个数据 3 插入到num2的首部
192.168.65.15:6379> rpoplpush num1 num2 
"3"

#查看效果
192.168.65.15:6379> lrange num2 0 -1  
1) "3"
2) "4"
3) "5"
4) "6"

四. 查看命令

查看命令相关有lrange、lindex、llen如下图:

操作及解释如下:

# lrange k 0 -1 查看所有
192.168.65.15:6379> lrange nums 0 -1  
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"
8) "d"

 # -1表示最后一个元素 -2表示倒数第二个
192.168.65.15:6379> lrange nums 0 -2  
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"

192.168.65.15:6379> lrange nums 1 2
1) "3"
2) "2"

 #lindex k  index 返回index指定下标的元素
192.168.65.15:6379> lindex nums 0 
"4"

 #-1表示最后一个,-2表示倒数第二个,以此类推
192.168.65.15:6379> lindex nums -1 
"d"

 #获取Lists的长度
192.168.65.15:6379> llen nums 
(integer) 8

五. 修改命令

修改命令是lset,修改时需要指定要修改元素的下标和要修改的新值。

操作及解释如下:

#先查看一波
192.168.65.15:6379> lrange nums 0 -1  
1) "4"
2) "3"
3) "2"
4) "111"
5) "a"
6) "b"
7) "c"
8) "d"

#修改下标3的值为110
192.168.65.15:6379> lset nums 3 110  
OK

#再查看一波,修改成功
192.168.65.15:6379> lrange nums 0 -1  
1) "4"
2) "3"
3) "2"
4) "110"
5) "a"
6) "b"
7) "c"
8) "d"

六. 删除命令

删除可以用lpop、rpop、lrem、ltrim实现。

操作及解释如下:

#查看测试数据
192.168.65.15:6379> lrange t1 0 -1 
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

#左边删除第一个并返回,也叫左出栈。 格式:lpop key
192.168.65.15:6379> lpop t1 
"a"

#查看测试数据
192.168.65.15:6379> lrange t1 0 -1 
1) "b"
2) "c"
3) "d"
4) "e"

#右边删除第一个并返回,也叫右出栈。 格式:rpop key
192.168.65.15:6379> rpop t1 
"e"

192.168.65.15:6379> lrange t1 0 -1
1) "b"
2) "c"
3) "d"
#查看测试数据
192.168.65.15:6379> lrange t2 0 -1 
1) "0"
2) "1"
3) "2"
4) "0"
5) "1"
6) "2"
7) "0"
8) "1"
9) "2"

#lrem key count value:count > 0从左侧向右侧删除
192.168.65.15:6379> lrem t2 2 1  
(integer) 2

#查看结果
192.168.65.15:6379> lrange t2 0 -1  
1) "0"
2) "2"
3) "0"
4) "2"
5) "0"
6) "1"
7) "2"

 #lrem key count value:count < 0从右侧向左侧删除
192.168.65.15:6379> lrem t2 -2 1 
(integer) 1

#查看结果
192.168.65.15:6379> lrange t2 0 -1  
1) "0"
2) "2"
3) "0"
4) "2"
5) "0"
6) "2"

#lrem key count value:count == 0删除列表中全部的value
192.168.65.15:6379> lrem t2 0 2
(integer) 3

#查看结果
192.168.65.15:6379> lrange t2 0 -1 
1) "0"
2) "0"
3) "0"
点击【阅读原文】,免费开始学习Redis视频课程!
- 千锋教育 -

近期课程上新:
Java基础 | Javaweb基础 | Java高级框架 | 微服务架构 | TiDB分布式数据库入门最佳实践 | VUE全面剖析及前后端联动实战 | 23种设计模式 | 企业级项目实战 | Java面试宝典

原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243805