redis list数据类型的使用 作者:马育民 • 2020-12-23 08:24 • 阅读:10151 # 介绍 简单的字符串列表,底层实现是双向链表,可以在头和尾 **添加/移除** 元素,通过索引下标操作中间的节点性能比较差,按照插入顺序排序 按照插入顺序排序,每个列表最多可以存储 $$2^{32} - 1$$ 个元素(40多亿) ### 应用场景 1. 排行榜 在电商平台排行榜、微博热搜、抖音排行榜,需要频繁查询这些排行榜,可以通过redis的SortedSet进行热点数据的排序。 **注意:** 适用定时更新的排行榜,不适合动态更新的排行榜(类似唱歌比赛排行榜) 2. 消息队列 由于redis有list push和list pop这样的命令,所以能够很方便的执行队列操作。 比如:双十一的支付操作 > 一般使用Kafka、NSQ、RabbitMQ等成熟的消息队列 ### 命令 http://redisdoc.com/list/index.html https://www.runoob.com/redis/redis-lists.html LPUSH LPUSHX RPUSH RPUSHX LPOP RPOP RPOPLPUSH LREM LLEN LINDEX LINSERT LSET LRANGE LTRIM BLPOP BRPOP BRPOPLPUSH # 例子-排行榜 ### 添加开发语言排行榜 ``` >rpush lang_charts c java c++ (integer) 3 ``` ### 读取排行榜 ``` >lrange lang_charts 0 -1 1) "c" 2) "java" 3) "c++" ``` ### 更新排行榜 先清空 ``` >ltrim lang_charts 1 0 ``` 再添加开发语言 ``` >rpush lang_charts python js c# (integer) 3 ``` # 例子-队列 [![](https://www.malaoshi.top/upload/pic/redis/Snipaste_2022-03-11_11-54-54.png)](https://www.malaoshi.top/upload/pic/redis/Snipaste_2022-03-11_11-54-54.png) ### 添加订单 订单数据是json格式 ``` >rpush orders "{'name':'《java入门到放弃》','price':'20','num':1,'user_id':'123'}" ``` ### 获取(并移除)第一个订单 ``` > lpop orders {'name':'《java入门到放弃》','price':'20','num':1,'user_id':'123'}" ``` 原文出处:http://malaoshi.top/show_1IXGtELzMnv.html