如何解决重复点赞
在Redis中缓存某个实体(帖子,评论/回复)的获赞
like:entity:entityType:entityId -> set(userId)
某个实体(帖子、评论/回复)的获赞
谁给这个实体点了赞,就将这个用户的id存到这个实体对应的集合里
//判断用是否已经点过赞了
//查询操作要放在事务操作之前,在事务中不会马上返回查询结果,按照队列顺序统一提交再执行
Boolean isMember = redisOperations.opsForSet().isMember(entityLikeKey, userId);
//开启事务
redisOperations.multi();
if(isMember){
//如果用已经点过赞了,则取消第二次点赞
redisOperations.opsForSet().remove(entityLikeKey,userId);
redisOperations.opsForValue().decrement(userLikeKey);
}
else{
redisTemplate.opsForSet().add(entityLikeKey,userId);
redisOperations.opsForValue().increment(userLikeKey);
}
return redisOperations.exec();//提交事务
解决措施:
每次执行点赞前,从缓存entityLikeKey 判断是否点赞
Redis开启事务,如果用已经点过赞了,则取消第二次点赞