阿里云程序员我爱编程

Redis List存储结构

2018-06-20  本文已影响20人  8033b4d1f3ec

List其实就是双向链表,平时在工作中我用list的场景主要有两大块。list可以非常方便的实现时间的排序,这个特点可以方便的满足平时一些用户发布动态流的业务场景,类似微信朋友圈,微博timeline等类似的场景。

用户动态流非常符合list的一个特性,list是有序的,假设我们现在设计一款类似微信朋友圈的信息流。那么我们只要调用redis的lpush功能,然后再调用ltrim命令即可实现保留最新的动态信息流功能。

当然list本身不适合做信息存储,如果把信息流的全部内容都存储在list中,那么删除会是一个问题,因为list删除只能全文匹配。这样的话,每次删除必须把用户发布的动态内容全部取出来,然后再做删除。内容存储,这时候我们想到了哪种数据结构,没错就是之前介绍的Redis Hash存储结构

我们可以把list中的唯一id,作为hash的field字段,value存储内容。这样既节约了存储空间,又实现了对动态内容的删除功能。

List的第二个功能就是用来做消息队列。例如订单队列,在订单回调成功的时候,采用lpush命令推入订单,在消费订单的小程序中,用rpop命令取到订单进行业务处理。

简单的业务场景用list来做消息队列问题不大,但是得了解list做消息队列的局限性。list是存储在内存中的,一旦redis宕机了,那么队列也将丢失。第二个局限性就是消费端的业务代码只能在同一个小程序中做处理,就是说你所有的消费业务都只能写在一段代码中,因为pop掉消息就没了。

以上就是list的主要使用场景和局限,list主要了解了这几个特性就差不多了。

上一篇下一篇

猜你喜欢

热点阅读