列表list
一个列表可以包含一个或多个数量的项item。每个项按照他们被push到列表的位置来排列
每个列表项所在的位置决定了这个像的索引值index,索引从0开始,从列表的左端到右端一次递增,
位于列表最左端表头位置的项的索引为0,而位于列表最右端表尾的索引为N-1,N为列表的长度。
列表包含的项可以出现重复,不必唯一。
从列表的左端push
将一个或以上数量值依次推入列表左端,返回被推入的值个数
两个效果等同
rpush从右边推入list
LPOP lst
RPOP lst
从list中推出
lindex list 1
返回给定的索引上的项
LRANGE key start end
示例:使用列表实现用户时间线
列表中的每个项包含一个消息id,通过这个id可以查找到消息本身
更新时间线
获取消息
列表的操作
设置制定索引上的列表项
LINSERT key BEFORE|AFTER pivot value
根据命令调用时传递的是BEFORE选项还是AFTER选项,将值value插入到制定列表项pivot的之前或者之后。
当pivot不存在与列表key时,不执行任何操作。
返回-1表示pivot不存在;返回0表示键key不存在,插入成功时则返回列表当前的长度
从列表中删除指定的值
LREM示例:
修剪列表
LTRIM key start stop
对一个列表进行修剪trim,让列表只保留指定索引范围内的列表选项,而将不在范围内的其他列表项全部删除。
两个索引都可以是正数或者负数。
示例:实现LLOOGG.com的几率存储功能
定长先进先出队列
定长先进先出队列的API机器实现
阻塞弹出命令
非阻塞
如果只要发现给定的列表中至少一个非空列表时,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