list类型是简单的字符串列表,按照插入顺序排序。每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景。。

  1. 消息队列

  list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过我不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然我觉得没必要去重复造轮子。

  2. 排行榜

  list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等,下图是酷狗音乐“K歌擂台赛”的昨日打擂金曲排行榜,每日计算一次,存储在list类型中,接口访问时,通过page和size分页获取打擂金曲。(打个小广告,酷狗音乐“K歌擂台赛”每天都能产生一批优质翻唱作品,对普通人优质歌声有兴趣的朋友不妨来听听)。

    

  但是,并不是所有的排行榜都能用list类型实现,只有定时计算的排行榜才适合使用list类型存储,与定时计算的排行榜相对应的是实时计算的排行榜,list类型不能支持实时计算的排行榜,之后在介绍有序集合sorted set的应用场景时会详细介绍实时计算的排行榜的实现。

  3. 最新列表

  list类型的lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表,如朋友圈的点赞列表、评论列表。

  但是,并不是所有的最新列表都能用list类型实现,因为对于频繁更新的列表,list类型的分页可能导致列表元素重复或漏掉,举个例子,当前列表里由表头到表尾依次有(E,D,C,B,A)五个元素,每页获取3个元素,用户第一次获取到(E,D,C)三个元素,然后表头新增了一个元素F,列表变成了(F,E,D,C,B,A),此时用户取第二页拿到(C,B,A),元素C重复了。只有不需要分页(比如每次都只取列表的前5个元素)或者更新频率低(比如每天凌晨更新一次)的列表才适合用list类型实现。对于需要分页并且会频繁更新的列表,需用使用有序集合sorted set类型实现。另外,需要通过时间范围查找的最新列表,list类型也实现不了,也需要通过有序集合sorted set类型实现,如以成交时间范围作为条件来查询的订单列表。之后在介绍有序集合sorted set类型的应用场景时会详细介绍sorted set类型如何实现最新列表。

  那么问题来了,对于排行榜和最新列表两种应用场景,list类型能做到的sorted set类型都能做到,list类型做不到的sorted set类型也能做到,那为什么还要使用list类型去实现排行榜或最新列表呢,直接用sorted set类型不是更好吗?原因是sorted set类型占用的内存容量是list类型的数倍之多(之后会在容量章节详细介绍),对于列表数量不多的情况,可以用sorted set类型来实现,比如上文中举例的打擂金曲排行榜,每天全国只有一份,两种数据类型的内存容量差距可以忽略不计,但是如果要实现某首歌曲的翻唱作品地区排行榜,数百万的歌曲,300多个地区,会产生数量庞大的榜单,或者数量更加庞大的朋友圈点赞列表,就需要慎重地考虑容量的问题了。

  list类型的常用命令可参考http://www.runoob.com/redis/redis-lists.html

  加入list类型的应用场景后的思维导图如下。

   

  

  

最新文章

  1. Content Negotiation in ASP.NET Web API
  2. 素数的线性筛 && 欧拉函数
  3. PHPCMS几个有用的全局函数
  4. Web框架之Tornado
  5. SparkContext源码阅读
  6. 刷了OpenWrt Attitude Adjustment 12.09,很满意
  7. Java设计模式01:设计模式的 分类 和 设计原则
  8. premake Ubuntu下的安装
  9. POJ 3414 Pots(BFS)
  10. 对象比较中 "相等性"和"同一性" 生动地解释
  11. Xcode修改包名(含cocopods)
  12. [Bayes] Variational Inference for Bayesian GMMs
  13. 爬虫系列二(数据清洗--->xpath解析数据)
  14. Hello vue.js的随笔记录
  15. 三、文件IO——系统调用
  16. Python3+PyQt5+PyCharm 桌面GUI开发环境搭建
  17. HTML 换行
  18. Iwconfig/aircrack-ng
  19. Eclipse Error: The refactoring does not change any source code
  20. Go语言特点

热门文章

  1. 文本处理命令 cat more less cut wc sort uniq
  2. CentOS7时区和时间设置
  3. 关键两步+6个要点,让Windows应用程序享有K8S的绝佳优势
  4. C# 获取键盘钩子,屏蔽键盘按键
  5. python3-cookbook笔记:第九章 元编程
  6. C# 获取鼠标在屏幕上的位置
  7. O2O外卖玩众包 开放平台难解标准之痛
  8. wifite硬核破解WiFi密码
  9. C++ Primer 抄书笔记(一)
  10. docker笔记(2)