由内容寻找用户
实现TimeLine方案
三种模式
优点:节省内存空间
缺点:耗时久 延迟高 每次要拉取
缺点 : 内存占用高
推拉结合
大v发发件箱和活跃粉丝
普通直接推送所有粉丝
基于推模式实现
新增博客时推送给所有的粉丝 推到redis中key为feed+粉丝id 的收件箱 存入blog的id
@Override
public Result saveBlog(Blog blog) {
// 获取登录用户
UserDTO user = UserHolder.getUser();
blog.setUserId(user.getId());
// 保存探店博文
boolean isSuccess = save(blog);
if(!isSuccess){
return Result.fail("新增笔记失败");
}
// 查询笔记作者的所有粉丝
List<Follow> follows = followServiceImpl.query().eq("follow_user_id", user.getId()).list();
// 推送笔记id给所有粉丝
for(Follow follow:follows){
Long userId = follow.getUserId();
String key = "feed:" + userId;
stringRedisTemplate.opsForZSet().add(key, blog.getId().toString(), System.currentTimeMillis());
}
// 返回id
return Result.ok(blog.getId());
}