Redis基本数据类型——列表类型

列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素、或者获取列表某一个片段。

Redis的列表类型是使用双向链表实现的。向两端添加、删除元素的时间复杂度为O(1)。

 

1、向两端添加、删除元素

格式

redis> LPUSH key value [value …]        # 向列表左端添加元素
redis> RPUSH key value [value …]        # 向列表右端添加元素
redis> LPOP key                         # 弹出列表左端第一个元素,会删除元素
redis> RPOP key                         # 弹出列表右端第一个元素,会删除元素

举例

127.0.0.1:6379> LPUSH numbers 0
(integer) 1
127.0.0.1:6379> LPUSH numbers 1 2
(integer) 3
127.0.0.1:6379> RPUSH numbers -1
(integer) 4
127.0.0.1:6379> LPUSH numbers 3
(integer) 5
127.0.0.1:6379> LPOP numbers
"3"
127.0.0.1:6379> RPOP numbers
"-1"

注:LPUSH和RPUSH返回的结果是列表中的元素个数;LPOP和RPOP返回的结果是弹出的元素值

2、获取列表元素个数

格式

redis> LLEN key

举例

127.0.0.1:6379> LLEN numbers
(integer) 3

3、获取列表片段

格式

redis> LRANGE key start stop    # 返回索引从start到stop之间的所有元素(包括两端元素)

举例

127.0.0.1:6379> LRANGE numbers 0 2
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> LRANGE numbers 0 1
1) "2"
2) "1"
127.0.0.1:6379> LRANGE numbers -2 -1
1) "1"
2) "0"

注:LRANGE命令支持负索引,表示从右边开始计算,如“-1”表示最右边第一个元素,以此类推。

如果start > stop:返回空列表。

如果stop > 实际索引范围:返回到列表最右边的元素。

4、删除列表中指定的值

格式

redis> LREM key count value    # 删除列表中前count个值为value的元素

注:

(1)count > 0时,LREM命令会从列表左边开始删除前count个值为value的元素;

(2)count < 0时,LREM命令会从泪奔右边开始删除前count个值为value的元素;

(3)count = 0时,LREM命令会删除所有值为value的元素

举例

127.0.0.1:6379> RPUSH numbers 2
(integer) 4
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
4) "2"
127.0.0.1:6379> LREM numbers -1 2
(integer) 1
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> RPUSH numbers 1
(integer) 4
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
4) "1"
127.0.0.1:6379> LREM numbers 1 2
(integer) 1
127.0.0.1:6379> LRANGE numbers 0 -1
1) "1"
2) "0"
3) "1"
127.0.0.1:6379> LREM numbers 0 1
(integer) 2
127.0.0.1:6379> LRANGE numbers 0 -1
1) "0"

5、获取/设置指定索引的元素值

格式

redis> LINDEX key index        # 获取指定索引index的元素值
redis> LSET key index value    # 设置指定索引indee的元素值为value

举例

127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "0"
127.0.0.1:6379> LINDEX numbers 1
"3"
127.0.0.1:6379> LSET numbers 1 6
OK
127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "6"
3) "2"
4) "1"
5) "0"

6、只保留列表指定片段的元素值

格式

redis> LTRIM key start end    # 该命令会删除指定索引范围外的所有元素

举例

127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "6"
3) "2"
4) "1"
5) "0"
127.0.0.1:6379> LTRIM numbers 0 2
OK
127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "6"
3) "2"

7、向列表插入元素

格式

redis> LINSERT key BEFORE|AFTER pivot value

注:该命令会从左到右查找值为pivot的第一个元素,然后根据第二个参数是BEFORE或AFTER来决定将value插入到该元素的前面还是后面。返回结果为列表元素个数。

举例

127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "6"
3) "2"
127.0.0.1:6379> LINSERT numbers BEFORE 6 5
(integer) 4
127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "5"
3) "6"
4) "2"
127.0.0.1:6379> LINSERT numbers AFTER 6 7
(integer) 5
127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "2"

8、将元素从一个列表转到另一个列表

格式

redis> RPORLPUSH source destination

注:从该命令的名字可以看出,其先执行RPOP命令在执行LPUSH命令

举例

127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "2"
127.0.0.1:6379> RPOPLPUSH numbers numbers_new
"2"
127.0.0.1:6379> LRANGE numbers 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
127.0.0.1:6379> LRANGE numbers_new 0 -1
1) "2"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值