社区网站7.7 热帖排行

这篇博客详细介绍了社区热帖排行的计算方法,包括Hacker News、StackOverflow和Nowcoder三个平台的不同算法。文章提及了RedisKeyUtil类、DiscussPostController、CommentController和LikeController的代码改动,以及Quartz定时任务的PostScoreRefreshJob类,用于实时更新帖子得分。此外,还讨论了代码重构和防止恶意刷分的策略,以及前端页面的更新,添加了最新和最热动态链接。
摘要由CSDN通过智能技术生成

  Hacker News
Score = (P-1)/(T+2)^G
  StackOverflow
(log(Qviews)4) + ((QanswersQscore)/5) + sum(Ascores)

(QageInHours+1) - ((AageInHours-Qupdated)/2))^1.5
  Nowcoder
log(精华分+评论数 ×10 + 点赞数× 2 + 收藏数× 2) + (发布时间-牛客纪元)
  在RedisKeyUtil类里,添加

//帖子分数
    public static String getPostScoreKey(){
   
        return PREFIX_POST + SPLIT + "score";
    }

  在DiscussPostController类addDiscussPost方法里return CommunityUtil.getJSONString(0,“发送成功!”);之前,添加

//计算帖子分数(发帖时给一个基础分),若存到队列里会导致重复计算,而存到set比较好
        String redisKey = RedisKeyUtil.getPostScoreKey();
        redisTemplate.opsForSet().add(redisKey,post.getId());

置顶不算分,加精要算分,所以在setWonderful方法里return CommunityUtil.getJSONString(0);之前添加

//计算帖子分数
        String redisKey = RedisKeyUtil.getPostScoreKey();
        redisTemplate.opsForSet().add(redisKey,id);

  在CommentController类addComment方法里return “redirect:/discuss/detail/”+discussPostId;之前,添加

//计算帖子分数
            String redisKey = RedisKeyUtil.getPostScoreKey();
            redisTemplate.opsForSet().add(redisKey,discussPostId);

  在LikeController类like方法里return CommunityUtil.getJSONString(0,null, map);之前,添加

if(entityType==ENTITY_TYPE_POST){
   
            //计算帖子分数(只是先收集帖子id)
            String redisKey = RedisKeyUtil.getPostScoreKey();
            redisTemplate.opsForSet().add(redisKey,postId);
        }

  在quartz包下新建PostScoreRefreshJob类,

//牛客纪元
    private static final Date epoch; //在静态块里初始化一下epoch

    static{
   
        try {
   
            epoch = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-08-01 00:00:00");
        } catch (ParseException e) {
   
            throw new RuntimeException("初始化牛客纪元失败!",e);
        }
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionExce
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值