利用Redis实现点赞功能
点赞功能咳咳,点赞功能哈,这是一个非常高频的操作,所以我们这里选择 redis 来存取数据哈开发点赞业务因为我们之前用 Spring 整合 Redis 的时候,已经做了 命名的规定。我们利用 RedisTemplate 这个Bean 操作数据库。点赞// 点赞public void like(int userId,int entityType,int entityId){String entity
·
点赞功能
咳咳,点赞功能哈,这是一个非常高频的操作,所以我们这里选择 redis 来存取数据哈
开发点赞业务
- 因为我们之前用 Spring 整合 Redis 的时候,已经做了 命名的规定。
- 我们利用 RedisTemplate 这个Bean 操作数据库。
点赞
// 点赞
public void like(int userId,int entityType,int entityId){
String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType,entityId);
Boolean isMember = redisTemplate.opsForSet().isMember(entityLikeKey, userId);
if(isMember){
redisTemplate.opsForSet().remove(entityLikeKey,userId);
}else {
redisTemplate.opsForSet().add(entityLikeKey,userId);
}
}
- 我们通过 实体类类别 和 他的id 来记录他的具体位置,用 set 集合来封装他,再将userId存入进去,表示这个评论或者帖子被这个用户给点赞了。
- 实体类类别 : 1 表示帖子 2 表示 评论
查询点赞的数量
// 查询实体点赞的数量
public long findEntityLikeCount(int entityType,int entityId){
String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType,entityId);
return redisTemplate.opsForSet().size(entityLikeKey);
}
- 这个简单哈,只要我们有他的类别和id,直接在数据库里面查这个集合的key的大小即可
查询该帖子的点赞状态
// 查询某人对某实体的点赞状态
public int findEntityLikeStatus(int userId,int entityType,int entityId){
String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType,entityId);
// 点过赞我们返回 1 没有点赞我们返回 0
return redisTemplate.opsForSet().isMember(entityLikeKey,userId) ? 1 : 0;
}
- 通过 type 和id 我们可以得到 集合中的 key, 然后我们就可以查询这个集合里面是否存在这个userId,如果存在,就表示这个人对这个帖子或者评论进行了点赞,否则就是没有。
视图层开发
- 做完业务层之后,我们就可以开发视图层了,
- 首先哈,我们点击点赞,就是反馈给页面,而不是全部刷新,所以我们采用异步请求的方式。
- 通过 hostHolder 进行获取当前的用户,再通过异步传入 实体类类别 和实体类Id ,就可以通过业务层进行实现 点赞的操作
@RequestMapping(value = "/like",method = RequestMethod.POST)
@ResponseBody
public String like(int entityType,int entityId){
User user = hostHolder.getUser();
// 实现点赞
likeService.like(user.getId(),entityType,entityId);
// 获取点赞的数量
long likeCount = likeService.findEntityLikeCount(entityType,entityId);
// 获取点赞的状态
int likeStatus = likeService.findEntityLikeStatus(user.getId(),entityType,entityId);
// 返回的结果
Map<String ,Object> map = new HashMap<>();
map.put("likeCount",likeCount);
map.put("likeStatus",likeStatus);
return CommunityUtil.getJSONString(0,null,map);
}
- 然后依次按照原来的请求将 点赞状态 和 点赞数量添加model即可。
更多推荐
所有评论(0)