一. 背景说明
小白:伟哥,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"
原文作者:Java架构栈;如有侵权,请联系管理员删除。