当前位置: 首页 > news >正文

网站建设员的薪水seo点击排名工具

网站建设员的薪水,seo点击排名工具,app小程序网站开发是什么,陕西企业网站建设哪家专业1 实现点赞功能显示哪些用户点赞过并安装时间顺序排序 使用sort_set 进行存储,把博客id作为key,用户id作为value,时间戳作为score 但存储成功之后还是没有成功按照时间顺序排名,因为sql语句,比如最后in(5…

1 实现点赞功能显示哪些用户点赞过并安装时间顺序排序

使用sort_set 进行存储,把博客id作为key,用户id作为value,时间戳作为score

但存储成功之后还是没有成功按照时间顺序排名,因为sql语句,比如最后in(5,1)、

我们要按照用户id5和3和1来显示,但sql会默认显示135,要修改sql语句order byfiled(id,5,1,3)按照自己定义的数据

@Overridepublic Result like(Long id) {String key  =  RedisConstants.BLOG_LIKED_KEY + id;Blog blog = getById(id);//获取登录用户Long userId = UserHolder.getUser().getId();//判断当前登录用户是否点赞Double isMember = stringRedisTemplate.opsForZSet().score(key,userId.toString());//如果未点赞可以点if(isMember == null){//+1boolean isUpdate = update().set("liked", blog.getLiked() + 1).eq("id", id).update();if(BooleanUtil.isTrue(isUpdate)){//zadd key value scorestringRedisTemplate.opsForZSet().add(key,userId.toString(),System.currentTimeMillis());}}else {stringRedisTemplate.opsForZSet().remove(key,userId.toString());//如果已经点赞则取消boolean isUpdate = update().set("liked", blog.getLiked() - 1).eq("id", id).update();//-1//从redis中去除}return null;}
@Overridepublic Result queryBlogLikes(Long id) {//查询前五点赞的人Set<String> top5 = stringRedisTemplate.opsForZSet().range(RedisConstants.BLOG_LIKED_KEY + id, 0, 4);if(top5 == null || top5.isEmpty()){return Result.ok(Collections.emptyList());}//解析出用户idList<Long> ids = top5.stream().map(Long::valueOf).collect(Collectors.toList());List<UserDTO> userDTOS = new ArrayList<>();//根据id查出用户ids.forEach(userId -> {User user = userService.getById(userId);UserDTO userDTO = new UserDTO();BeanUtils.copyProperties(user,userDTO);userDTOS.add(userDTO);});return Result.ok(userDTOS);}

 

2 使用set集合记录共同关注

每个人关注时,往以自己id为key的set集合里面添加被关注的人的id,查看另一个用户的共同关注时,可以使用set集合的intersect查看交集id,再通过id流操作得到被关注的User对象

 

 @Overridepublic Result followCommons(Long id) {if (UserHolder.getUser() != null) {Long userId = UserHolder.getUser().getId();String key = "follows:" + userId;String key2 = "follows" + id;Set<String> intersect = stringRedisTemplate.opsForSet().intersect(key,key2);if(intersect == null || intersect.isEmpty()){return Result.ok(Collections.emptyList());}//解析id集//使用流操作List<Long> ids = intersect.stream().map(Long::valueOf).collect(Collectors.toList());List<UserDTO> collects = userService.listByIds(ids).stream().map(user -> {return BeanUtil.copyProperties(user, UserDTO.class);}).collect(Collectors.toList());return Result.ok(collects);}return Result.fail("共同关注发生问题");}
}

 

3 使用sortedset记录滚动分页查询

修改代码,在有用户保存发送新的博客时,将查询数据库中他的所有粉丝,并以粉丝为key,博客id为value,当前时间戳为为score进行保存,在粉丝点击自己的关注时,将按照时间戳的从大到小进行分页查询,记录上一次查询到什么数据,将其时间戳的下一个作为下一次的起始,再加上偏移量,zset默认按照score从小到大进行排序

 Set<ZSetOperations.TypedTuple<String>> typedTuples = stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores(RedisConstants.FEED_KEY + userId, 0, max, offset, 2);

 查找按照分数反向排序0 - max范围内的2个数据,offset就是从第一个下面offset个开始,比如为5,5,4,2,1

按照当前查找是得到5,5(第二个5)

然后max 变成第二个5

然后后面再从中查找找到的是第一个5,所以要加上偏移量1,也就是从4开始

@Overridepublic Result saveBlog(Blog blog) {UserDTO user = UserHolder.getUser();blog.setUserId(user.getId());// 保存探店博文blogService.save(blog);//查询笔记作者的粉丝List<Follow> follows = followService.lambdaQuery().eq(Follow::getFollowUserId, user.getId()).list();//推送笔记id给所有粉丝for(Follow follow : follows){Long userId = follow.getUserId();String key = RedisConstants.FEED_KEY + userId;stringRedisTemplate.opsForZSet().add(key,blog.getId().toString(),System.currentTimeMillis());}// 返回idreturn Result.ok(blog.getId());}@Overridepublic Result queryBlogOfFollow(Long max, Integer offset) {Long userId = UserHolder.getUser().getId();//查询收件箱Set<ZSetOperations.TypedTuple<String>> typedTuples = stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores(RedisConstants.FEED_KEY + userId, 0, max, offset, 2);if(typedTuples == null || typedTuples.isEmpty()){return Result.ok();}//解析数据 blogId,时间戳,offsetList<Long> ids = new ArrayList<>(typedTuples.size());Long minTime = 0L;int os = 1;for(ZSetOperations.TypedTuple<String> tuple : typedTuples){//获取idString idStr = tuple.getValue();if (idStr != null) {ids.add(Long.valueOf(idStr));}//获取分数时间戳long time = Objects.requireNonNull(tuple.getScore()).longValue();if(time == minTime){os++;}else{minTime = time;os = 1;}}String idStr = StrUtil.join(",",ids);//根据id查询blogList<Blog> blogs = query().in("id", ids).last("ORDER BY FIELD(id," + idStr + ")").list();for (Blog blog : blogs){User user = userService.getById(userId);blog.setName(user.getNickName());blog.setIcon(user.getIcon());isLiked(blog);}ScrollResult r = new ScrollResult();r.setList(blogs);r.setOffset(os);r.setMinTime(minTime);return Result.ok(r);}
}

http://www.hkea.cn/news/887965/

相关文章:

  • 做网站前后端的发布流程自己如何制作网站
  • 网站营销与推广策略百度一下官网首页百度
  • 网站建设张世勇100个免费推广b站
  • 网络营销的常用工具百度关键词优化点击 教程
  • 公司网站要怎么做少儿编程培训机构排名前十
  • 一个好的网站是什么样的商家联盟营销方案
  • 网站解除域名绑定网站广告收费标准
  • 郑州的建设网站有哪些手续免费发布推广信息的平台有哪些
  • 手机做网站软件优化服务平台
  • 网站图片装修的热切图怎么做营销技巧培训
  • 可以上传图片的网站怎么做百度关键词点击
  • 泉州网站制作广州seo网站开发
  • cuntlove wordpressseo外链发布工具
  • 购买一个网站空间如何可以多个域名使用吗长沙网站建设服务
  • 天津市建设委员会网站上海网站制作开发
  • 扬中网站建设墨子学院seo
  • 分析电子商务网站建设需求教案青岛今天发生的重大新闻
  • 汕头模板开发建站百度发布信息怎么弄
  • 健身网站开发项目总结关键词筛选工具
  • 重庆网站建设零臻靠谱国内永久免费的云服务器
  • 软件库合集软件资料2024郑州百度快照优化
  • 房地产开发公司网站建设方案seo去哪里学
  • 做网站可以赚钱吗百度小说搜索风云排行榜
  • 做网站交接需要哪些权限网站seo视频教程
  • 在网站怎么做收款二维码刷移动关键词优化
  • 问信息奥赛题怎么做 去哪个网站互联网网络推广
  • b2c电子商务网站系统下载专业网站seo推广
  • 引流推广的方法seo诊断工具
  • 平阴县建设工程网站直通车推广怎么做
  • 网站开发外包不给ftp高佣金app软件推广平台