如何解决重复点赞

在Redis中缓存某个实体(帖子,评论/回复)的获赞
like:entity:entityType:entityId -> set(userId)
某个实体(帖子、评论/回复)的获赞
谁给这个实体点了赞,就将这个用户的id存到这个实体对应的集合里

  1. //判断用是否已经点过赞了
  2. //查询操作要放在事务操作之前,在事务中不会马上返回查询结果,按照队列顺序统一提交再执行
  3. Boolean isMember = redisOperations.opsForSet().isMember(entityLikeKey, userId);
  4. //开启事务
  5. redisOperations.multi();
  6. if(isMember){
  7. //如果用已经点过赞了,则取消第二次点赞
  8. redisOperations.opsForSet().remove(entityLikeKey,userId);
  9. redisOperations.opsForValue().decrement(userLikeKey);
  10. }
  11. else{
  12. redisTemplate.opsForSet().add(entityLikeKey,userId);
  13. redisOperations.opsForValue().increment(userLikeKey);
  14. }
  15. return redisOperations.exec();//提交事务

解决措施:
每次执行点赞前,从缓存entityLikeKey 判断是否点赞
Redis开启事务,如果用已经点过赞了,则取消第二次点赞