微博热搜榜rss订阅,微博热搜榜趋势报告

  微博热搜榜rss订阅,微博热搜榜趋势报告

  00-1010技术模拟思路:第一步:初始化一个月的历史数据;第二步:定期刷新数据;第三步:排行榜查询界面。

  00-1010用26个英文字母实现排名,每个字母随机生成一个随机数作为分数。

  为了获得更好的体验,先做几件事:

  先初始化一个月的历史数据5秒,模拟微博的热度刷新(比如模拟赞和评论的热度值更新)1小时,结合每日、每周、每月的排名统计。

  

目录

@ Service @ SLF 4j public class InitService { @ Autowired private redis template redis template;/* * *首先初始化1个月的历史数据*/public void init30day(){ //计算当前小时keylonghour=system。current time millions()/(1000 * 60 * 60);//初始化近30天,每天24 key for(int I=1;i24 * 30I ){ //向后过去30天string key=constants . hour _ key(hour-I);this . init member(key);system . out . println(key);}}/* * *初始化key */public void init成员(string key){ random rand=new random();//使用26个英文字母实现排名,为每个字母随机生成一个随机数作为得分for(int I=1;i=26I){ this . redis template . ops forzset()。add(key,String.valueOf((char)(96 i)),rand . nextint(10));} }}

 

  

技术模拟思路:

@ Service @ SLF 4j public class TaskService { @ Autowired private redis template redis template;/** *2.计时5秒,模拟微博热度刷新(比如模拟赞和评论热度值的更新)* 3。计时1小时,结合每日、每周、每月排名。*/@ post construct public void init(){ log . info(开始初始化..);//2.计时5秒,模拟微博的热度刷新(比如模拟喜欢评论的热度值更新)new thread(()-this .refreshdatah小时())。start();//3.固定时间1小时巩固和统计日、周、月排行榜。新线程(()-this.refreshData())。start();}/* * *使用26个英文字母实现排名,每个字母随机生成一个随机数作为分数*/public void刷新小时(){//计算当前小时key longhour=system . current time millis()/(1000 * 60 * 60);//对26个英文字母进行排名,为每个字母随机生成一个随机数作为score Random rand=new Random();for(int I=1;i=26I){//Redis的ZINCRBY加上这个整数值this.redistemplate.opsforzset()。IncrementScore(constants . hour _ key hour,string.valueof ((char) (96I)),rand . nextint(10));}}/* * *刷新当日统计*/public void刷新日(){ longhour=system . current time millions()/(1000 * 60 * 60);ListString other keys=new ArrayList();//计算最近24小时内的密钥

 

   for(int i=1;i<23;i++){            String  key=Constants.HOUR_KEY+(hour-i);            otherKeys.add(key);        }        //把当前的时间key,并且把后推23个小时,共计近24小时,求出并集存入Constants.DAY_KEY中        //redis ZUNIONSTORE 求并集        this.redisTemplate.opsForZSet().unionAndStore(Constants.HOUR_KEY+hour,otherKeys,Constants.DAY_KEY);        //设置当天的key 40天过期,不然历史数据浪费内存        for(int i=0;i<24;i++){            String  key=Constants.HOUR_KEY+(hour-i);            this.redisTemplate.expire(key,40, TimeUnit.DAYS);        }        log.info("天刷新完成..........");    }    /**     *刷新7天的统计数据     */    public void refreshWeek(){        long hour=System.currentTimeMillis()/(1000*60*60);        List<String> otherKeys=new ArrayList<>();        //算出近7天内的key        for(int i=1;i<24*7-1;i++){            String  key=Constants.HOUR_KEY+(hour-i);            otherKeys.add(key);        }        //把当前的时间key,并且把后推24*7-1个小时,共计近24*7小时,求出并集存入Constants.WEEK_KEY中        this.redisTemplate.opsForZSet().unionAndStore(Constants.HOUR_KEY+hour,otherKeys,Constants.WEEK_KEY);        log.info("周刷新完成..........");    }    /**     *刷新30天的统计数据     */    public void refreshMonth(){        long hour=System.currentTimeMillis()/(1000*60*60);        List<String> otherKeys=new ArrayList<>();        //算出近30天内的key        for(int i=1;i<24*30-1;i++){            String  key=Constants.HOUR_KEY+(hour-i);            otherKeys.add(key);        }        //把当前的时间key,并且把后推24*30个小时,共计近24*30小时,求出并集存入Constants.MONTH_KEY中        this.redisTemplate.opsForZSet().unionAndStore(Constants.HOUR_KEY+hour,otherKeys,Constants.MONTH_KEY);        log.info("月刷新完成..........");    }    /**     *定时1小时合并统计 天、周、月的排行榜。     */    public void refreshData(){        while (true){            //刷新当天的统计数据            this.refreshDay();//            刷新7天的统计数据            this.refreshWeek();//            刷新30天的统计数据            this.refreshMonth();            //TODO 在分布式系统中,建议用xxljob来实现定时            try {                Thread.sleep(1000*60*60);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    /**     *定时5秒钟,模拟微博的热度刷新(例如模拟点赞 收藏 评论的热度值更新)     */    public void refreshDataHour(){        while (true){            this.refreshHour();            //TODO 在分布式系统中,建议用xxljob来实现定时            try {                Thread.sleep(5000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

 

  

步骤3:排行榜查询接口

@RestController@Slf4jpublic class Controller {    @Autowired    private RedisTemplate redisTemplate;    @GetMapping(value = "/getHour")    public Set getHour() {        long hour=System.currentTimeMillis()/(1000*60*60);        //ZREVRANGE 返回有序集key中,指定区间内的成员,降序。        Set<ZSetOperations.TypedTuple<Integer>> rang= this.redisTemplate.opsForZSet().reverseRangeWithScores(Constants.HOUR_KEY+hour,0,30);        return rang;    }    @GetMapping(value = "/getDay")    public Set getDay() {        Set<ZSetOperations.TypedTuple<Integer>> rang= this.redisTemplate.opsForZSet().reverseRangeWithScores(Constants.DAY_KEY,0,30);        return rang;    }    @GetMapping(value = "/getWeek")    public Set getWeek() {        Set<ZSetOperations.TypedTuple<Integer>> rang= this.redisTemplate.opsForZSet().reverseRangeWithScores(Constants.WEEK_KEY,0,30);        return rang;    }    @GetMapping(value = "/getMonth")    public Set getMonth() {        Set<ZSetOperations.TypedTuple<Integer>> rang= this.redisTemplate.opsForZSet().reverseRangeWithScores(Constants.MONTH_KEY,0,30);        return rang;    }}

到此这篇关于springboot+redis实现微博热搜排行榜的示例代码的文章就介绍到这了,更多相关springboot redis微博热搜排行榜内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 怎样保存微博视频到手机相册,将微博视频保存到手机相册
  • 基于python编写一个微博抽奖小程序游戏,基于python编写一个微博抽奖小程序多少钱
  • 基于python编写一个微博抽奖小程序游戏,基于python编写一个微博抽奖小程序多少钱,基于Python编写一个微博抽奖小程序
  • 微博视频博主认证方法有哪些,微博视频博主认证方法不一样
  • 微博怎么悄悄关注教程图片,微博怎么悄悄关注教程中的人
  • 微博视频怎么搞合集,怎样做微博合集
  • 微博昵称不可用什么意思-,微博说昵称不可使用是什么原因
  • 怎么循环播放微博视频,微博视频设置单个循环
  • 怎么注册微博账号不用手机号,如何不用手机注册微博账号
  • python爬取微博热点,如何用python爬取公众号文章
  • 微博水印怎么弄到中间详情里,微博水印在中间怎么弄
  • python自动发微博评论怎么发,Python发微博
  • 微博来自个人主页是什么意思呀,什么叫微博主页
  • 微博如何删视频,微博删除视频怎么看
  • 微博批量删除微博教程图片,微博批量删除微博教程是真的吗
  • 留言与评论(共有 条评论)
       
    验证码: