Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜04

上述文章主要探讨了实现滚动榜单的两种方式。第一种方式是同步写n天滚动榜单,但这种方式存在一个严重的缺点:每天都需要编写多个榜单。尽管在实现三天或七天滚动榜单时相对简单,但若要实现近30天的滚动榜单,这种方式显得不够智能。因此,本文提出了一种新的实现滚动榜单的方式。

具体实现如下:

1.编写当日榜单:将当日主播礼物收益命名为榜单,并进行存储。

例如:

以下是用户ID为Test0001的用户在获得价值为13140的礼物时,增加今日榜单同时需要增加下面2的滚动榜单:

java 复制代码
//今日榜单的key定义为:gift_list_cache:20231226
redis.zincrby("gift_list_cache:20231226", 13140, "Test0001");

2.创建当日滚动榜单:以日期命名,建立一个记录当日主播礼物收益的滚动榜单(后续定时任务将使用该榜单进行合并)。

java 复制代码
//今日滚动榜单的key定义为:gift_list_cache_scroll:20231226
redis.zincrby("gift_list_cache_scroll:20231226", 13140, "Test0001");

3.定时任务处理榜单:每天凌晨0点,将前六天的榜单合并,形成一个新的临时榜单,然后将该榜单中的数据合并至当日滚动榜单中。这样,就实现了滚动更新榜单的功能。

java 复制代码
//合并前6日榜单
ZUNIONSTORE today_temporary 6 gift_list_cache_scroll:20231226 gift_list_cache_scroll:20231225 gift_list_cache_scroll:20231224 gift_list_cache_scroll:20231223 gift_list_cache_scroll:20231222 gift_list_cache_scroll:20231221

4.把这个临时榜单的数据合并到今日的滚动榜单中,这样今日榜单中的数据就是近七天的主播礼物收益数据。

注意:这里最好用java代码遍历临时榜单today_temporary的所有元素,然后zincrby到gift_list_cache_scroll:20231226之中。

通过以上方式,可以更加智能地实现滚动榜单,避免了每天都需要编写多个榜单的麻烦。

这种滚动榜单实现方式的优点:

  1. 简单易实现,只需编写少量代码,并使用两个固定的关键字来获取当天滚动榜的数值。

这种滚动榜单实现方式的缺点:

  1. 依赖于定时任务,在数据初始化完成之前可能存在排行榜数据缺失的问题。这会导致排行榜数据无法平滑过渡,是一个很严重的问题。尤其在定时任务执行时间较长的情况下,排行榜将在相当长的时间内处于异常状态。
相关推荐
一叶飘零_sweeeet3 小时前
从手写 Redis 分布式锁到精通 Redisson:分布式系统的并发控制终极指南
redis·分布式·redisson
睡觉的时候不会困3 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
自学也学好编程5 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
ChinaRainbowSea6 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
鼠鼠我捏,要死了捏8 小时前
Redis缓存穿透、缓存击穿与雪崩防护及性能优化实战指南
redis·cache·performance
麦兜*9 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
失散1310 小时前
分布式专题——5 大厂Redis高并发缓存架构实战与性能优化
java·redis·分布式·缓存·架构
十八旬13 小时前
苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
java·数据库·spring boot·redis·缓存·spring cache
2301_7816686114 小时前
Redis 面试
java·redis·面试
吐泡泡_14 小时前
Redis(缓存)
redis