列表类型类似我们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"
本文介绍Redis列表类型的使用方法,包括基本命令如LPUSH、RPUSH、LPOP、RPOP等,以及扩展命令如LINDEX、LSET、LTRIM、LINSERT等。详细解释了这些命令的用途及应用场景。
1119

被折叠的 条评论
为什么被折叠?



