Redis列表 API
2019-02-24 本文已影响67人
若兮缘
列表结构
key仍然是一个字符串,value是一个有序队列,且可以重复,左右两边插入弹出。
可以计算列表的长度-llen
,删除列表中指定的某个元素-lrem
,获取子列表-lrange
,按照索引获取列表值-lindex
列表重要API
增相关
命令演示效果如图
删相关
lpop、rpop、lrem命令演示效果
ltrim命令演示效果
ltrim命令在做一些大的列表删除时是非常有用的,假设数据量是上百万,如果直接执行del key会将redis阻塞掉,我们可以使用ltrim每次裁剪10万分之一数据,最后达到一个删除的效果。
查相关
命令演示效果如图
改相关
命令演示
实战-TimeLine
实际上就是微博的时间轴功能,会将你关注的用户最新的微博按照从新到旧的顺序来排列,这和我们的列表是非常类似的,可以使用类似lpush、rpush、lpop、rpop这样的功能,还可以按照每10页做一个分页。
比如微博列表顺序是按照右图这样的排列规则,就是以关注用户的微博ID作为key,而用户的如微博内容、点赞数等等信息则可以另外存储到一个比如哈希结构里,通过微博ID就可以进行一个关联。
假设你关注的人更新了微博,就可以使用lpush
命令去更新list数据,使用lrange
命令获取最新的10条微博,然后通过hmget
命令去哈希中取出微博的具体内容。
查缺补漏
执行这两个命令会有一个阻塞的过程,如果设置了非0的timeout,那么当列表为空时,命令不会立即返回结果,而是阻塞等待直到超时,或者当有新的值被插入时就会进行获取并返回。在实现类似消息队列功能时会非常有帮助。
小的TIPS
- LRUSH + LPOP = Stack(栈)
- LPUSH + RPOP = Queue(队列)
- LPUSH + LTRIM = Capped Collection(固定数量的列表)
- LPUSH + BRPOP = Message Queue(消息队列)