1.实现基础的点赞功能(当用户进行点赞判断是否已经点赞,若点赞则取消若未点赞则点赞)
实现方式:在redis中存入一个set集合每当一个用户进行点赞则将改用户id存入key为他所点赞的帖子的id+标志字符,每次点赞前进行判断该set集合中是否存在,若存在则取消赞,并删除set中的用户id,不存在则添加赞并添加用户id到set集合中
代码
@Override
public Result likeBlog(Long id) {
//1.获取登录用户
// Long id1 = UserHolder.getUser().getId();
UserDTO user = UserHolder.getUser();
if (user==null){
return Result.fail("请先进行登录");
}
Long userId = user.getId();
//2.判断当前用户是否进行点赞
/*todo 利用setnx进行判断,前缀+博客id未key,用户id未value*/
String key ="blog:liked:"+id;
//判断是否存在
Boolean member = stringRedisTemplate.opsForSet().isMember(key, userId.toString());
if (BooleanUtil.isFalse(member)){
//用户未点赞
//数据库点赞数加一
boolean success = update().setSql("liked = liked + 1").eq("id", id).update();
//保存用户到redis的set集合中
if (success){
stringRedisTemplate.opsForSet().add(key,userId.toString());
}
}else {
//用户以点赞
//数据库点赞数减一
boolean success = update().setSql("liked = liked - 1").eq("id", id).update();
//删除redis的set集合中的用户信息
if (success){
stringRedisTemplate.opsForSet().remove(key,userId.toString());
}
}
return Result.ok();
}
添加点赞排行功能(显示点赞的前几名)
set集合不支持排序,所以需要将set集合更改为sortedSet