BBS论坛项目相关-18:热帖排行模块

本文介绍了BBS论坛项目的热帖排行模块,通过帖子的精华分、评论数、点赞数、收藏数及发布时间计算得分,采用Log公式以平衡不同时间段的影响。为了提高效率,点赞和评论等操作的得分更新缓存在Redis中,然后定时计算。同时,文章提到了帖子分数更新后需要同步更新ES中的数据,并讨论了如何通过mode参数灵活调整排序方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BBS论坛项目相关-18:热帖排行模块

热帖排行

根据帖子是否加精,评论数,点赞数,收藏数以及发布时间等进行计算加分然后排名
Log(精华分+评论数10+点赞数2+收藏数*2)+(发布时间-纪元)
用log让前期评论点赞等权重较重,后期影响较小。
为了效率较高,每次点赞评论等不立即进行算分,而是放入redis中进行缓存,之后定时进行计算。
设计一个帖子分数的key,当发生点赞评论等操作时就存入redis中。
redis中只是存储帖子分数发生变化的帖子id,所以使用redis的set存储,去重,防止重复计算。对帖子点赞,评论等行为,把帖子id放在redis。
发帖

@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);

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

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

        // 报错的情况,将来统一处理.
        return CommunityUtil.getJSONString(0, "发布成功!");
    }

加精

// 加精
    @RequestMapping(path = "/wonderful", method = RequestMethod.POST)
    @ResponseBody
    public String setWonderful(int id) {
   
        discussPostService.updateStatus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值