【六】redis数据结构之list,命令及其时间复杂度

list结构

key                       elements

color                      red----black----blue

list是有序的,可重复的。

可用于微博的TimeLine,根据时间轴显示微博。关注的人跟新了微博,就把该微博push到队列的头里。

命令

rpush key value1 value2 value3... valueN  从list的右边添加一个或者多个元素  时间复杂度o(1~n)

lpush key value1 value2 value3... valueN  从list的左边添加一个或者多个元素   时间复杂度o(1~n)

lrange key start end 查询list中的数据,整数从左边开始,负数从右边开始,包含end  时间复杂度o(n)

比如0到5和-1到-6,查询的元素一样,但是顺序反过来了。

lindex key index 获取List中指定下标的元素,从左边第一个开始下标为0   时间复杂度o(n)

rpop key  移出并获取列表右边的第一个元素   时间复杂度o(1)

lpop key  移出并获取列表左边的第一个元素  时间复杂度o(1)

llen key  获取列表长度  时间复杂度o(1)

linsert key before|after value newvalue  在列表的元素前(左边)或者后(右边)插入元素   时间复杂度o(n)

node1:0>lrange listcolor 0 3
 1)  "orange2"
 2)  "orange1"
 3)  "read"
 4)  "black"
node1:0>linsert listcolor before orange1 blue
"5"

node1:0>lrange listcolor 0 3
 1)  "orange2"
 2)  "blue"
 3)  "orange1"
 4)  "read"
node1:0>

lset key index newvalue 设置list下标为index的值为newvalue,下标从左边开始第一个为0  时间复杂度o(n)


node1:0>lrange listcolor 0 -1
 1)  "orange2"
 2)  "blue"
 3)  "orange1"
 4)  "read"
 5)  "black"

node1:0>lset listcolor 3 blue2
"OK"

node1:0>lrange listcolor 0 -1
 1)  "orange2"
 2)  "blue"
 3)  "orange1"
 4)  "blue2"
 5)  "black"
node1:0>

lrem key count value    时间复杂度o(n)

count>0,从左到右,删除最多count个value相等的元素

count=0,删除所有value相等的元素

count<0,从右到左,删除最多count个value相等的元素

 

ltrim key start end 对一个列表进行修剪(trim),时间复杂度o(n)

就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

对于很大的链表,在删除的时候,直接del key很可能引起阻塞,所以可以用ltrim一次保留万分之一,逐步裁剪,最后达到删除的效果。

blpop key timeout  移出并获取列表左边的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。时间复杂度o(1)

brpop key timeout  移出并获取列表右边的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 时间复杂度o(1)

提示

1.lpush + lpop  实现栈

2.lpush + rpop  实现队列

3.lpush + ltrim  实现有上限的list,而不是让它无限变大

4.lpush + brpop  实现消息队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值