Redis学习3--列表键List

时间:2021-12-23 19:44:49

列表list


一个列表可以包含一个或多个数量的项item。每个项按照他们被push到列表的位置来排列

每个列表项所在的位置决定了这个像的索引值index,索引从0开始,从列表的左端到右端一次递增,

位于列表最左端表头位置的项的索引为0,而位于列表最右端表尾的索引为N-1,N为列表的长度。

列表包含的项可以出现重复,不必唯一。


从列表的左端push


将一个或以上数量值依次推入列表左端,返回被推入的值个数

Redis学习3--列表键List

Redis学习3--列表键List

两个效果等同


rpush从右边推入list

LPOP lst 

RPOP lst

从list中推出

lindex list 1

返回给定的索引上的项

Redis学习3--列表键List

LRANGE key start end 

Redis学习3--列表键List


示例:使用列表实现用户时间线

列表中的每个项包含一个消息id,通过这个id可以查找到消息本身

Redis学习3--列表键List

更新时间线

Redis学习3--列表键List


获取消息

Redis学习3--列表键List


列表的操作


设置制定索引上的列表项


LINSERT key BEFORE|AFTER pivot value

根据命令调用时传递的是BEFORE选项还是AFTER选项,将值value插入到制定列表项pivot的之前或者之后。

当pivot不存在与列表key时,不执行任何操作。

返回-1表示pivot不存在;返回0表示键key不存在,插入成功时则返回列表当前的长度

Redis学习3--列表键List


从列表中删除指定的值

Redis学习3--列表键List


LREM示例:

Redis学习3--列表键List


修剪列表


LTRIM key start stop

对一个列表进行修剪trim,让列表只保留指定索引范围内的列表选项,而将不在范围内的其他列表项全部删除。

两个索引都可以是正数或者负数。


示例:实现LLOOGG.com的几率存储功能

Redis学习3--列表键List


定长先进先出队列

Redis学习3--列表键List

定长先进先出队列的API机器实现


Redis学习3--列表键List


Redis学习3--列表键List


阻塞弹出命令

Redis学习3--列表键List

Redis学习3--列表键List

非阻塞

如果只要发现给定的列表中至少一个非空列表时,BLPOP或者BRPOP就会立即从那个列表中弹出元素在这种情况下

BLPOP就像接受多个参数的LPOP命令,而BRPOP就像是一个接受多参数的RPOP命令

阻塞并超时

如果都是空列表将会阻塞,并在超时时间后返回。

如果在被阻塞的过程中客户端项列表中推送新项,那么服务器将这个新项自动返回给客户端

BLPOP、BRPOP执行先到先服务的原则

比如如果lst列表为空,客户端x执行命令BLPOP lst timeout,之后客户端Y也同样执行BLPOP lst timeout 两者都会被阻塞

如果还未timeout时,客户端Z执行RPUSH lst “hello”,将值推送到lst列表中,会返回给客户端X而不是Y,因为x的被阻塞时间早于Y


Redis学习3--列表键List