网站搭建工具,外国的贸易网站,宁波seo外包联系方式,网站经营性备案多少钱上述文章主要探讨了实现滚动榜单的两种方式。第一种方式是同步写n天滚动榜单#xff0c;但这种方式存在一个严重的缺点#xff1a;每天都需要编写多个榜单。尽管在实现三天或七天滚动榜单时相对简单#xff0c;但若要实现近30天的滚动榜单#xff0c;这种方式显得不够智能。… 上述文章主要探讨了实现滚动榜单的两种方式。第一种方式是同步写n天滚动榜单但这种方式存在一个严重的缺点每天都需要编写多个榜单。尽管在实现三天或七天滚动榜单时相对简单但若要实现近30天的滚动榜单这种方式显得不够智能。因此本文提出了一种新的实现滚动榜单的方式。
具体实现如下
1.编写当日榜单将当日主播礼物收益命名为榜单并进行存储。
例如
以下是用户ID为Test0001的用户在获得价值为13140的礼物时增加今日榜单同时需要增加下面2的滚动榜单
//今日榜单的key定义为gift_list_cache:20231226
redis.zincrby(gift_list_cache:20231226, 13140, Test0001);
2.创建当日滚动榜单以日期命名建立一个记录当日主播礼物收益的滚动榜单后续定时任务将使用该榜单进行合并。
//今日滚动榜单的key定义为gift_list_cache_scroll:20231226
redis.zincrby(gift_list_cache_scroll:20231226, 13140, Test0001);
3.定时任务处理榜单每天凌晨0点将前六天的榜单合并形成一个新的临时榜单然后将该榜单中的数据合并至当日滚动榜单中。这样就实现了滚动更新榜单的功能。
//合并前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. 依赖于定时任务在数据初始化完成之前可能存在排行榜数据缺失的问题。这会导致排行榜数据无法平滑过渡是一个很严重的问题。尤其在定时任务执行时间较长的情况下排行榜将在相当长的时间内处于异常状态。