开发者学堂课程【Redis 入门到精通(基础篇):数据类型-list 实现日志消息队列】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/764/detail/13383
数据类型-list 实现日志消息队列
内容介绍
一、list 类型数据操作注意事项
二、list 类型应用场景
三、Tips7
一、list 类型数据操作注意事项
●list中保存的数据都是string 类型的,数据总容量是有限的,最多2^32-1个元素(4294967295)。
●list 具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
●获取全部数据操作结束索引设置为-1
●list 可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
List 的操作就介绍到这里,有一些操作,但是常用的我们已经学习了,接下来说一下注意事项,首先,list中保存的数据都是string类型的,数据总容量是有限的,最多2^32-1个元素(4294967295),一般不会去塞满,如果满了系统会告诉你的,超过范围;
第二,list具有索引的概念,在之前看到了,索引的时候,有1,还有0,-1,-2这样的概念,这样除了我们按照左右两端进行操作以外,还有索引的方式进行,注意的是最主要的操作方式不是栈就是队列的模型,先进先出,先进后出,或者说后进先出,最主要的还是以队列的形式或者栈的形式呈现,就是左右操作;
第三,获取全部数据操作的结束索引设置为-1,这个并不是通用格式,而是倒着查,使用其他的也可以,就是我们使用全操作,len 0 -1;最后一个,list有顺序,可以做一些有意思的事情,把数据都加进去以后,可以对数据进行分页操作,取一个数值分开,然后通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载,可能有,也可能没有,通常第一页走内存,走list,用缓存思想,数据通过我们的内存提供,这是提高我们查询一种分页的方式,
有时候提高工作效率不是靠一个方案解决,可以多方面考虑,这样某个地方带来的就可能解决很多问题,比方说淘宝,第一页数据快速拉,第二页就自己去翻,再去查数据库,一般第一页解决问题较多,这是list的使用注意事项。
二、list 类型应用场景
业务场景
twitter、新浪微博、腾讯微博中个人用户的关注列表需要按照用户的关注顺序进行展示,粉丝列表需要将最近关注的粉丝列在前面
新闻、资讯类网站如何将最新的新闻或资讯按照发生的时间顺序展示?
企业运营过程中,系统将产生出大量的运营数据,如何保障多台服务器操作日志的统一顺序输出?
接下来就用一个应用场景对 list 做一个综合的应用,twitter、新浪微博、腾讯微博中个人用户的关注列表是有顺序的,先关注的会慢慢后退,被新关注的挤到后面,粉丝也是一样,新关注的粉丝列在前面,这是一个典型的多数据,有顺序的一个应用,面对这样的情况只有 list才能实现,像一些新闻或者说企业运营的数据的日志等等,都是最近发生的在最前面,有时候还会造成一些比较麻烦的影响。
比方说四台服务器,各自都有日志,然后结合到一块,出问题了,特别乱,不知道怎样排列的,那么此时就需要一个redis,将所有的日志收起来,然后谁先发生谁先进去,一个一个按照队列那样,无论哪个先发生,都去redis里面,这样就不会出问题了,如果需要时,有一台服务器,向redis发出请求调用,redis给出,这时给出的就是最全的,没有单独这一说,这样就解决了这个问题。
解决方案
●依赖list的数据具有顺序的特征对信息进行管理
●使用队列模型解决多路信息汇总合并的问题
●使用栈模型解决最新消息的问题
三、Tips7
●redis应用于最新消息展示
依赖list的数据具有顺序的特征对信息进行管理,我们可以用队列消息来解决这个多路消息的汇总合并,我们也可以用栈的模型解决这个最新消息的问题,消息一个一个进去,最新的就是最上面的那个,接下来进行模拟。
打开三个客户端,一号客户端发起一个日志,rpush logs a1.. ,然后回车,rpush logs a1... ,回车,二号客户端rpush logs b1.. ,回车,二号客户端rpush logs b1... ,三号客户端,rpush logs c1.. ,回车,然后二号发送,三号发送,rpush logs c1... ,回车,此时总服务器查询,lrange logs 0 -1,所有的就都出现了,都是按时间顺序依次进入redis,此时redis充当的就是一个消息的聚集,优点就是有顺序,谁先进来谁先放进去,这就是依赖list的数据具有顺序的特征对信息进行管理,刚刚的顺序是右进左出的顺序,是从消息的时间发生往下列的,可以用作消息排队,也就是最新消息展示。