redis之列表类型

本文介绍Redis列表类型的使用方法,包括基本命令如LPUSH、RPUSH、LPOP、RPOP等,以及扩展命令如LINDEX、LSET、LTRIM、LINSERT等。详细解释了这些命令的用途及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表类型类似我们java里面的双向链表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
因为内部是使用双向链表来实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。就算你有千万级别的数据列表,我们获取头部和尾部的10条记录也是极快的。
当然链表也有可能会访问比较慢,如果我们使用索引访问的方式访问中间部分这样是及其的慢的。一般来说我们插入的时候比较快速度是O(1),所以适合用来记录日志,可以保证加入新日志的速度不会受到已有日志数量的影响。
借助列表类型,redis可以作为队列使用。

基本命令

lpush key value [value ...]
rpush key value [value ...]

测试如下:

127.0.0.1:6379> lpush mylist 1
(integer) 1
127.0.0.1:6379> lpush mylist 2 3
(integer) 3
加入完成之后就变成了 3 2 1 ,上面我们采用的是往左边加的方式。我们下面往右边加的方式会使用rpush命令,其用法和lpush类似:
127.0.0.1:6379> rpush mylist 0 -1
(integer) 5
接下来列表就变成 3 2 1 0 -1

上面演示了添加元素接下来看看如何弹出元素:

lpop key
rpop key

演示如下:

127.0.0.1:6379> lpop mylist
"3"
127.0.0.1:6379> rpop mylist
"-1"

上面展示了从左边和右边分别弹出一个元素。
我们也可以使用LLEN这个命令来查看长度。

127.0.0.1:6379> LLEN mylist
(integer) 3

如何获取列表段的值

lrange key start stop

我们利用lrange能够获得列表中的某以片段。lrange命令将返回索引从start和stop之间的所有元素。在redis中索引是从0开始,-1代表从右边的第一位也就是从左开始的倒数第一位。如果索引超过最大的就会返回最右边的第一个。

127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> lrange mylist 0 1
1) "2"
2) "1"
127.0.0.1:6379> lrange mylist -2 -1
1) "1"
2) "0"
127.0.0.1:6379> lrange mylist 1 999
1) "1"
2) "0"

删除列表中指定的值

lrem key count value

lrem命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,lrem命令的执行方式会略有差异。
1.当count>0时lrem命令会从列表左边开始删除钱count个值为value的元素。
2.当count<0时lrem命令会从列表右边开始删除前count的绝对值值为value的元素
3.当count=0就删除所有的值为value的元素。

127.0.0.1:6379> rpush mylist 2
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "0"
4) "2"
127.0.0.1:6379> lrem mylist -1 2
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "0"

扩展命令

1.获得/设置指定索引的元素值

lindex key index
lset key index value

lindex命令用来获取指定索引的元素,索引从0开始,时间复杂度是O(n)。

127.0.0.1:6379> lindex mylist 0
"2"
127.0.0.1:6379> lindex mylist -1
"0"
127.0.0.1:6379> lset mylist 1 8
OK
127.0.0.1:6379> lindex mylist 1
"8"

2.只保留列表指定片段

ltrim key start end

作用是保留start-end之间的元数删除其它所有元素。

127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "8"
3) "0"
127.0.0.1:6379> rpush mylist 4
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "8"
3) "0"
4) "4"
127.0.0.1:6379> ltrim mylist 1 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "8"
2) "0"

3.向列表中插入元素

linsert key before|after pivot value

这是一个比较有意思的插入命令它可以从列表中从左往右查找到pivot的元素,然后判断是以before还是after来决定将value插入到该元素的前面还是后面。

127.0.0.1:6379> lrange mylist 0 -1
1) "8"
2) "0"
127.0.0.1:6379> linsert mylist before 0 7 
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "8"
2) "7"
3) "0"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值