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 实现消息队列