Redis数据类型——常用Redis列表(List)

参考:http://redisdoc.com/


Redis列表(List)列表中的元素可重复

1、lpush key value [value …]

  • 将一个或多个值 value 插入到列表 key 的表头
  • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
  • 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
  • 当 key 存在但不是列表类型时,返回一个错误。
127.0.0.1:6379> keys *

127.0.0.1:6379> LPUSH mylist a b c //将一个或多个值 value 插入到列表 key 的表头
3
127.0.0.1:6379> LRANGE mylist 0 -1
c
b
a
127.0.0.1:6379> 

2、lrange key start stop

  • 元素先进后出
  • 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
  • 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
  • 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
127.0.0.1:6379> keys *

127.0.0.1:6379> LPUSH mylist a b c  //把元素a b c 插入mylist列表中
3
127.0.0.1:6379> LRANGE mylist 0 -1 //返回列表 key 中指定区间内的元素
c
b
a
127.0.0.1:6379> 

3、rpush key value [value …]

  • 元素先进先出
  • 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
  • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
  • 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
  • 当 key 存在但不是列表类型时,返回一个错误。
127.0.0.1:6379> RPUSH mylist1 a b c //把元素a b c 插入mylist1列表中
3
127.0.0.1:6379> LRANGE mylist1 0 -1  
a
b
c
127.0.0.1:6379> 

4、lpop key

  • 移除栈顶的元素
  • 移除并返回列表 key 的头元素。
  • 列表的头元素。 当 key 不存在时,返回 nil 。
127.0.0.1:6379> LRANGE mylist1 0 -1
a
b
c
127.0.0.1:6379> LPOP mylist1  //移除栈顶的元素
a
127.0.0.1:6379> LRANGE mylist1 0 -1
b
c
127.0.0.1:6379> 

5、rpop key

  • 移除栈底的元素
  • 移除并返回列表 key 的尾元素。
  • 列表的尾元素。 当 key 不存在时,返回 nil 。
127.0.0.1:6379> LRANGE mylist 0 -1
c
b
a
127.0.0.1:6379> RPOP mylist  //移除栈底的元素
a
127.0.0.1:6379> LRANGE mylist 0 -1
c
b
127.0.0.1:6379> 

6、lindex key index

  • 返回列表 key 中,下标为 index 的元素。
  • 标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
  • 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
  • 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> LRANGE mylist 0 -1
c
b
127.0.0.1:6379> LINDEX mylist 0 //获取下标为0的元素
c
127.0.0.1:6379> LINDEX mylist 1  //获取下标为1的元素
b
127.0.0.1:6379> 

7、llen key

  • 返回列表 key 的长度。
  • 如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
  • 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> lpush list1 a b c d e f
6
127.0.0.1:6379> llen list1	//返回列表 key 的长度。
6
127.0.0.1:6379> llen mylist2  // key 不存在,则 key 被解释为一个空列表,返回 0 .
0
127.0.0.1:6379> 

8、lrem key count value

  • 根据参数 count 的值,移除列表中与参数 value 相等的元素。
  • count 的值可以是以下几种:
  • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
  • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
  • count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> RPUSH list2 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
15
127.0.0.1:6379> lrem list2 2 4  //从表头开始向表尾搜索,移除数量二个,值为4的元素,
2
127.0.0.1:6379> LRANGE list2 0 -1
1
1
1
2
2
2
3
3
3
4
5
5
5
127.0.0.1:6379> lrem list2 -2 1
2
127.0.0.1:6379> LRANGE list2 0 -1 // 从表尾开始向表头搜索,,移除数量二个,值为1的元素,
1
2
2
2
3
3
3
4
5
5
5
127.0.0.1:6379> lrem list2 0 3  //移除所有的值为3的元素,
3
127.0.0.1:6379> lrange list2 0 -1
1
2
2
2
4
5
5
5
127.0.0.1:6379> 

9、ltrim key start stop

  • 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
  • 举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
  • 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
  • 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
  • 当 key 不是列表类型时,返回一个错误。
127.0.0.1:6379> rpush list3 h e l l o 
5
127.0.0.1:6379> lrange list3 0 -1 
h
e
l
l
o
127.0.0.1:6379> ltrim list3 0 2 //截取下标在0到2区间内的元素
OK
127.0.0.1:6379> lrange list3 0 -1
h
e
l
127.0.0.1:6379> lpush list4  1 2 3 4 5 6 7 8 9
9
127.0.0.1:6379> lrange list4 0 -1
9
8
7
6
5
4
3
2
1
127.0.0.1:6379> ltrim list4 0 3 //截取下标在0到3区间内的元素
OK
127.0.0.1:6379> lrange list4 0 -1
9
8
7
6
127.0.0.1:6379> 

10、rpoplpush source destination

命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

  • 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
  • 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

举个例子,你有两个列表 source 和 destination , source 列表有元素 a, b, c , destination 列表有元素 x, y, z ,执行 RPOPLPUSH source destination 之后, source 列表包含元素 a, b , destination 列表包含元素 c, x, y, z ,并且元素 c 会被返回给客户端。

  • 如果 source 不存在,值 nil 被返回,并且不执行其他动作。
  • 如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。
127.0.0.1:6379> rpush source a b c
3
127.0.0.1:6379> lrange source 0 -1
a
b
c
127.0.0.1:6379> rpush destination x y z
3
127.0.0.1:6379> lrange destination 0 -1
x
y
z
127.0.0.1:6379> rpoplpush  source destination //先将列表source栈底位置的元素移除,在把移除的元素插入列表destination的栈顶位置
c
127.0.0.1:6379> lrange source 0 -1
a
b
127.0.0.1:6379> lrange destination 0 -1
c
x
y
z
127.0.0.1:6379> 

11、lset key index value

  • 将列表 key 下标为 index 的元素的值设置为 value 。
  • 当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
127.0.0.1:6379> lpush list5 a b c d e f g
7
127.0.0.1:6379> lrange list5 0 -1
g
f
e
d
c
b
a
127.0.0.1:6379> lset list5 1 xiaozhi  //将列表list5下标为1的元素的值设置为xiaohzi。
OK
127.0.0.1:6379> lrange list5 0 -1
g
xiaozhi
e
d
c
b
a
127.0.0.1:6379> 

12、linsert key before|after pivot value

  • 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
  • 当 pivot 不存在于列表 key 时,不执行任何操作。
  • 当 key 不存在时, key 被视为空列表,不执行任何操作。
  • 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> lrange list5 0 -1
g
xiaozhi
e
d
c
b
a
127.0.0.1:6379> linsert list5 before d java  //在元素d之前插入java元素
8
127.0.0.1:6379> lrange list5 0 -1
g
xiaozhi
e
java
d
c
b
a
127.0.0.1:6379> linsert list5 after d redis //在元素d之后插入redis元素
9
127.0.0.1:6379> lrange list5 0 -1
g
xiaozhi
e
java
d
redis
c
b
a
127.0.0.1:6379> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小志的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值