Redis学习3--列表键List

本文详细介绍了Redis中的列表键(List)的操作,包括从列表两端push、pop元素,获取指定索引的项,范围查询,插入指定位置的元素,删除指定值,以及修剪列表等功能。此外,还提到了列表在实现用户时间线和概率存储功能中的应用,以及作为定长FIFO队列的使用,特别讨论了阻塞弹出命令BLPOP和BRPOP的工作原理。

列表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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值