使用Redis实现热搜功能

编程入门 行业动态 更新时间:2024-10-24 15:20:09

使用Redis实现热搜<a href=https://www.elefans.com/category/jswz/34/1771378.html style=功能"/>

使用Redis实现热搜功能

Redis热搜

  • 原理
    • 数据类型
    • redis操作简单实现
  • 实操
    • 封装方法
    • 执行方法
    • 最后使用springboot的定时任务对热搜榜单进行维护

原理

使用redis实现热搜的原理就是维护一个zset集合,然后使用score作为当前搜索词的搜索量,score越高的搜索词就说明该搜索词热度越高。然后在每天凌晨十二点对热搜榜进行维护,将前十名热搜删除,防止热搜霸榜(这里有更好的热搜榜单维护方式,感兴趣的小伙伴可以自己了解一下)。

数据类型

使用redis中的zset类型,主要使用的方法有两个:

zincrby: 对zset中的元素score进行自增自减操作
zrevrange:降序获得zset中的热搜榜单

写到这里大家应该已经明白了,当用户搜索时,使用zincrby方法对搜索词的score进行自加操作。查询热搜榜单时,使用zrevrange获得热搜前几名的搜索词。

redis操作简单实现

首先创建一个zset集合

现在我们向zset中添加几条数据

假设现在搜索词为5的数据被五个用户分别搜索了五次,使用zincrby模拟该操作。


现在执行查询操作,查出热榜上前五的搜索词,使用zrevrange模拟该操作。

至此理论成立,开始实践!

实操

封装方法

首先在redis的工具类中封装zincrby和zrevrange两个方法

	public static void zincrby(String key , Object value , double score){//不管有没有该数据,先add一边,如果有该语句不执行,如果没有就创建一条数据。//使用add会覆盖原来scoreredisTem.opsForZSet().addIfAbsent(key , value , 0);//获取原来的scoreDouble score1 = redisTem.opsForZSet().score(key, value);//自增redisTem.opsForZSet().add(key , value , score1+ score);}public static Set zrevrange(String key , long start , long end){return redisTem.opsForZSet().reverseRange(key , start , end);}

执行方法

然后在用户执行搜索操作的时候对搜索词的score进行更改

//condition是搜索条件
RedisTemplateUtil.zincrby(RedisConstants.HOTSELECT , condition , 1);

写一下查询接口

	@GetMapping("/getHotSelect")@ApiOperation("获取热搜榜单")@ApiImplicitParam(name = "count" , value = "获取数量")public Result getHotSelect(int count){if(count <= 0){return Result.BAD_REQUEST();}return videoService.getHotSelect(count);}

service:

	@Overridepublic Result getHotVideo(int count) {Set zrevrange = RedisTemplateUtil.zrevrange(RedisConstants.HOTVIDEO, 0, count - 1);return Result.OK(zrevrange);}

最后使用springboot的定时任务对热搜榜单进行维护

笔者这里写的是每天凌晨将前十个热搜删除,这个方法写的比较烂,大家可以自己查询学习一下比较好的热搜算法,对热搜进行维护。(可以将这些数据放入mysql统一管理或者使用一个变量作为热度因子对热搜真实热度进一步统计)

	@Scheduled(cron = "0 0 0 * * *")private void deletehotSelect(){for(int i = 0;i<10;i++){redisTem.opsForZSet().popMax(RedisConstants.HOTSELECT);}}

(完)

更多推荐

使用Redis实现热搜功能

本文发布于:2023-11-15 11:27:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1598815.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:功能   Redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!