项目-26-热帖排行

热帖排行

  • 实现,在发帖、点赞、加精时将发生变化的帖子存入Redis中。再通过定时任务,每隔一定的时间,计算帖子的分数进行更新
  • 新建PostScoreRefreshJob类进行处理

1.RedisKeyUtil

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

2.处理Controller

DiscussPostController

	//发布帖子
    @RequestMapping(path = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String addDiscussPost(String title, String content) {
   
        User user = hostHolder.getUser();
        if (user == null) {
   
            return CommunityUtil.getJSONString(403, "你还没有登录哦!");
        }

        DiscussPost post = new DiscussPost();
        post.setUserId(user.getId());
        post.setTitle(title);
        post.setContent(content);
        post.setCreateTime(new Date());
        discussPostService.addDiscussPost(post);

        //在发布帖子时,异步地将帖子存到es中
        //使用生产者生产事件
        Event event = new Event()
                .setTopic(TOPIC_PUBLISH)
                .setEntityType(ENTITY_TYPE_POST)
                .setEntityId(post.getId())
                .setUserId(user.getId());
        eventProducer.fireEvent(event);
        //发布帖子时,也会有初始的分数,将其存在Redis
        String redisKey = RedisKeyUtil.getPostScoreKey();
        //选择set的原因:set中没有重复的数据,因此可保证我们不会存入多个重复的帖子,减少后面的计算量
        redisTemplate.opsForSet().add(redisKey, post.getId());
        //报错的情况,将来统一处理.
        return CommunityUtil.getJSONString(0, "发布成功!");
    }
    

	//加精
    @RequestMapping(path = "/wonderful", method = RequestMethod.POST)
    @ResponseBody
    public String setWonderful(int id) {
   
        discussPostService.updateStatus(id, 1);

        // 触发发帖事件
        Event event = new Event()
                .setTopic(TOPIC_PUBLISH)
                .setUserId(hostHolder.getUser().getId())
                .setEntityType(ENTITY_TYPE_POST)
                .setEntityId(id);
        eventProducer.fireEvent(event);

        //帖子加精,会改变其分数,将其存在Redis
        String redisKey = RedisKeyUtil.getPostScoreKey();
        //选择set的原因:set中没有重复的数据,因此可保证我们不会存入多个重复的帖子,减少后面的计算量
        redisTemplate.opsForSet().add(redisKey, id);

        return CommunityUtil.getJSONString(0);
    }

CommentController

	//添加评论
    @RequestMapping(path = "/add/{discussPostId}", method = RequestMethod.POST)
    public String addComment(@PathVariable("discussPostId") int discussPostId, Comment comment){
   
        //客户端表单中向服务器需要提交以下内容
        /*
        private int id;
        private int userId;
        private int entityType;         //评论的类型,比如帖子的评论,评论用户评论的评论
        private int entityId;           //评论的帖子的id
        private int targetId;           //记录评论指向的人
        private String content;         //评论的内容
        private int status;             //表明状态,是否被拉黑
        private Date createTime;        //创建的时间*/
        //其中 entityType entityId targetId content 需要表单中进行提交
      /*  comment.setId(user.getId());
        String username = user.getUsername();
        System.out.println(username);
        model.addAttribute("username",username);*/

        comment.setUserId(hostHolder.getUser().getId());
        comment.setStatus(0);
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值