如何解决重复点赞
在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开启事务,如果用已经点过赞了,则取消第二次点赞
