From 1cdb060a8aa59b0979f7609db1781805528e76e7 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 25 六月 2025 18:25:42 +0800 Subject: [PATCH] 视频评论数、收藏数通过mq、redis实现 --- framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java | 44 +++++++++++++++++++++++--------------------- 1 files changed, 23 insertions(+), 21 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java index 6d4047b..ca4e7af 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java @@ -11,6 +11,7 @@ import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import cn.lili.modules.lmk.enums.general.VideoCommentStatusEnum; +import cn.lili.modules.lmk.event.event.VideoCommentNumCacheEvent; import cn.lili.modules.lmk.service.ThumbsUpRecordService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.CommentTagsEnum; @@ -32,6 +33,7 @@ import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import cn.lili.utils.PageUtil; @@ -59,11 +61,7 @@ private final ThumbsUpRecordService thumbsUpRecordService; private final RocketMQTemplate rocketMQTemplate; private final RocketmqCustomProperties rocketmqCustomProperties; - - /** - * 璇勮鐐硅禐鏁扮殑杩囨湡鏃堕棿 - */ - public final static long EXPIRE_TIME = 15l; + private final ApplicationEventPublisher eventPublisher; /** * 娣诲姞 @@ -92,7 +90,9 @@ entity.setUserAvatar(currentUser.getFace()); baseMapper.insert(entity); // 鍒濆鍖杛edis涓瘎璁虹殑鐐硅禐鏁伴噺 - cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(entity.getId()), 0, EXPIRE_TIME, TimeUnit.DAYS); + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(entity.getId()), 0, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); + // 澶勭悊瑙嗛璇勮鏁� + eventPublisher.publishEvent(new VideoCommentNumCacheEvent(this, entity.getVideoId())); return Result.ok("娣诲姞鎴愬姛").data(this.detail(entity.getId()).get("data")); } @@ -198,7 +198,7 @@ public void mqThumbsUp(ThumbsUpRecord record) { boolean exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper()) .eq(ThumbsUpRecord::getRefId, record.getRefId()) - .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId()) + .eq(ThumbsUpRecord::getUserId, record.getUserId()) .exists(); if (exists) { return; @@ -209,7 +209,7 @@ cache.incr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId())); } else { if (Objects.nonNull(comment)) { - cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); } } // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁� @@ -223,27 +223,29 @@ @Override public Result cancelThumbsUp(ThumbsUpRecordForm form) { + ThumbsUpRecord record = ThumbsUpRecordForm.getEntityByForm(form, null); + record.setUserId(UserContext.getCurrentUserId()); // 璧癿q寮傛澶勭悊 String destination = rocketmqCustomProperties.getCommentTopic() + ":" + CommentTagsEnum.CANCEL_THUMBS_UP.name(); - rocketMQTemplate.asyncSend(destination, JSON.toJSONString(form), RocketmqSendCallbackBuilder.commonCallback()); + rocketMQTemplate.asyncSend(destination, JSON.toJSONString(record), RocketmqSendCallbackBuilder.commonCallback()); return Result.ok(); } @Override @Transactional(rollbackFor = Exception.class) - public void mqCancelThumbsUp(ThumbsUpRecordForm form) { + public void mqCancelThumbsUp(ThumbsUpRecord record) { new LambdaUpdateChainWrapper<>(thumbsUpRecordService.getBaseMapper()) - .eq(ThumbsUpRecord::getRefId, form.getRefId()) - .eq(ThumbsUpRecord::getThumbsUpType, form.getThumbsUpType()) - .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId()) + .eq(ThumbsUpRecord::getRefId, record.getRefId()) + .eq(ThumbsUpRecord::getThumbsUpType, record.getThumbsUpType()) + .eq(ThumbsUpRecord::getUserId, record.getUserId()) .remove(); // redis鏁伴噺鍑忎竴 - VideoComment comment = this.getById(form.getRefId()); - if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()))) { - cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId())); + VideoComment comment = this.getById(record.getRefId()); + if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()))) { + cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId())); } else { if (Objects.nonNull(comment)) { - cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() - 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() - 1, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); } } // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁� @@ -256,20 +258,20 @@ } /** - * 浠巖edis涓幏鍙栬瘎璁烘暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis + * 浠巖edis涓幏鍙栬瘎璁虹偣璧炴暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis * * @param commentId * @param mysqlNum * @return */ - private long getCommentThumbsUpNum(String commentId, long mysqlNum) { + private Integer getCommentThumbsUpNum(String commentId, Integer mysqlNum) { Object redisNum = cache.get(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId)); if (Objects.isNull(redisNum)) { // redis涓病鏈夊氨鎶婃暟鎹簱鐨勫啓鍒皉edis涓� - cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId), mysqlNum, EXPIRE_TIME, TimeUnit.DAYS); + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId), mysqlNum, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); return mysqlNum; } - return Long.valueOf((Integer) redisNum); + return (Integer) redisNum; } @Override -- Gitblit v1.8.0