欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > List结构之非实时榜单实战

List结构之非实时榜单实战

2025/4/6 4:17:18 来源:https://blog.csdn.net/2301_76231794/article/details/147003793  浏览:    关键词:List结构之非实时榜单实战

像京东、淘宝等电商系统一般都会有热销的商品榜单,比如热销手机榜单,热销电脑榜单,这些都是非实时的榜单。为什么是非实时的呢?因为完全实时的计算和排序对于资源消耗较大,尤其是当涉及大量交易数据时。

一般来说,热销榜单的数据并不是即时更新的,电商平台会采用定时任务或者批量处理的方式来更新榜单数据,例如每小时或每天更新一次。这样做既保证了榜单的新鲜度,又不至于给系统带来过大的负担。

因此我们实现非实时榜单,一般是通过定时调度和大数据处理,去拉取数据计算榜单,之后通过redis的list结构将数据放到redis,当用户访问时,会将榜单查询出来。

下面我们来实战一下非实时榜单!

首先我们先假设一些热销数据放入redis中:

@Testpublic void saveRank(){String DAILY_RANK_KEY = "video:rank:daily";VideoDO videoDO1 = new VideoDO(1,"Java基础","hhhh",1000);VideoDO videoDO2 = new VideoDO(2,"Java web","xxxxx",20000);VideoDO videoDO3 = new VideoDO(3,"Springboot","lllll",3000);VideoDO videoDO4 = new VideoDO(4,"Springclound","oooo",4000);//插入的顺序是videoDO1,videoDO2,videoDO3,videoDO4	redisTemplate.opsForList().leftPushAll(DAILY_RANK_KEY,videoDO4,videoDO3,videoDO1,videoDO1);}

 接着我们将redis中所有的热销数据查询出来:

@RestController
@RequestMapping("api/v1/rank")
public class RankController {@Autowiredprivate RedisTemplate redisTemplate;public static final String DAILY_RANK_KEY = "video:rank:daily";@RequestMapping("daily_rank")public JsonData videoDailyRank(){List<VideoDO> list = redisTemplate.opsForList().range(DAILY_RANK_KEY, 0, -1);return JsonData.buildSuccess(list);}
}

我们可以看到结果跟我们插入的顺序一样:

{"code": 0,"data": [{"id": 1,"title": "Java基础","img": "hhhh","price": 1000},{"id": 2,"title": "Java web","img": "xxxxx","price": 20000},{"id": 3,"title": "Springboot","img": "lllll","price": 3000},{"id": 4,"title": "Springclound","img": "oooo","price": 4000}],"msg": null
}

当然如果我们需要替换掉其中某个数据也是可以哒。

假设我们要将Springboo这个视频换成面试专题的视频:

@Testpublic void replaceRank(){String DAILY_RANK_KEY = "video:rank:daily";VideoDO video = new VideoDO(10,"面试专题","yyyy",10000);//将DAILY_RANK_KEY的第2的索引位置的视频换成video视频redisTemplate.opsForList().set(DAILY_RANK_KEY,2,video);}

 结果如下:

{"code": 0,"data": [{"id": 1,"title": "Java基础","img": "hhhh","price": 1000},{"id": 2,"title": "Java web","img": "xxxxx","price": 20000},{"id": 10,"title": "面试专题","img": "yyyy","price": 10000},{"id": 4,"title": "Springclound","img": "oooo","price": 4000}],"msg": null
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词