FollowService

倒序查询

    //查询某用户关注的人public List<Map<String, Object>> findFollowees(int userId, int offset, int limit){String followeeKey = RedisKeyUtil.getFolloweeKey(userId, ENTITY_TYPE_USER);//需要按照时间倒序排列Set<Integer> targetIds = redisTemplate.opsForZSet().reverseRange(followeeKey, offset, offset + limit - 1);if(targetIds == null){return null;}List<Map<String, Object>> list  = new ArrayList<>();for(Integer targetId : targetIds){Map<String, Object> map = new HashMap<>();User user = userService.findUserById(targetId);map.put("user", user);Double score = redisTemplate.opsForZSet().score(followeeKey, targetId);//还原回时间map.put("followTime", new Date(score.longValue()));list.add(map);}return list;}//查询某用户的粉丝public List<Map<String, Object>> findFollowers(int userId, int offset, int limit){String followerKey = RedisKeyUtil.getFollowerKey(ENTITY_TYPE_USER,userId);Set<Integer> fromIds = redisTemplate.opsForZSet().reverseRange(followerKey, offset, offset + limit - 1);if(fromIds == null){return null;}List<Map<String, Object>> list  = new ArrayList<>();for(Integer fromId : fromIds){Map<String, Object> map = new HashMap<>();User user = userService.findUserById(fromId);map.put("user", user);Double score = redisTemplate.opsForZSet().score(followerKey, fromId);map.put("followTime", new Date(score.longValue()));list.add(map);}return list;}

FollowController

    //获取所有的关注列表@RequestMapping(path="/followees/{userId}", method = RequestMethod.GET)public String getFollowees(@PathVariable("userId") int userId, Page page, Model model){User user = userService.findUserById(userId);if(user == null){throw  new RuntimeException("该用户不存在!");}model.addAttribute("user",user);page.setLimit(5);page.setPath("/followees/" + userId);page.setRows((int) followService.findFolloweeCount(userId, CommunityConstant.ENTITY_TYPE_USER));List<Map<String, Object>> userList = followService.findFollowees(userId, page.getOffset(),page.getLimit());if(userList != null){for(Map<String, Object> map:userList){User u = (User) map.get("user");//获取当前用户对实体是否关注过map.put("hasFollowed", hasFollowed(u.getId()));}}model.addAttribute("users", userList);return "/site/followee";}//获取所有的粉丝列表@RequestMapping(path="/followers/{userId}", method = RequestMethod.GET)public String getFollowers(@PathVariable("userId") int userId, Page page, Model model){User user = userService.findUserById(userId);if(user == null){throw  new RuntimeException("该用户不存在!");}model.addAttribute("user",user);System.out.println("userId: "+user.getId());page.setLimit(5);page.setPath("/followers/" + userId);page.setRows((int) followService.findFollowerCount(userId, CommunityConstant.ENTITY_TYPE_USER));List<Map<String, Object>> userList = followService.findFollowers(userId, page.getOffset(),page.getLimit());if(userList != null){for(Map<String, Object> map:userList){User u = (User) map.get("user");map.put("hasFollowed", hasFollowed(u.getId()));}}model.addAttribute("users", userList);return "/site/follower";}private boolean hasFollowed(int userId){if(hostHolder.getUser() == null){return false;}return  followService.hasFollowed(hostHolder.getUser().getId(),CommunityConstant.ENTITY_TYPE_USER, userId);}

4.6 关注列表、粉丝列表相关推荐

  1. 4.3 关注、取消关注和关注、粉丝列表

    文章目录 设计Redis的key和Value 开发关注.取关的业务 开发Controller,接受关注取关请求 修改主页的js 增加获取关注,粉丝数量,是否关注的业务 主页的Controller 修改 ...

  2. 11、Redis实现关注、取消关注以及关注和粉丝列表

    实现关注.取消关注 value的数据类型时zset,有序集合,按照关注的时间排序 followee:userId:entityType -> zset(entityId,now) 某个用户关注的 ...

  3. Redis的应用实例:关注和粉丝的 实现

    前言: 我们知道,关注和粉丝已经成为很多信息流平台必备的功能,比如我们的csdn就有这一功能,但是随着关注人的增加,我们如果采用普通数据库的存储可能会满足不了用户的速度上的体验,如:MySQL数据存储 ...

  4. 使用JavaScript语言配合开发者工具获取B站关注或粉丝的详细信息

    使用JavaScript语言配合开发者工具获取B站关注或粉丝的详细信息 说明:需要在浏览器登录自己的B站账号,才能获取到自己关注或粉丝的完整的信息,否则以访客的身份只能获取到前五页用户的信息,而且会出 ...

  5. 【Redis的应用-关注和粉丝】

    Redis的应用实例:关注和粉丝的 实现 前言: 我们知道,关注和粉丝已经成为很多信息流平台必备的功能,比如我们的csdn就有这一功能,但是随着关注人的增加,我们如果采用普通数据库的存储可能会满足不了 ...

  6. 4-6:关注列表,粉丝列表

    需要做的工作 业务层 查询某个用户关注的人,支持分页. -查询某个用户的粉丝,支持分页. 表现层 处理"查询关注的人"."查询粉丝"请求. 编写"查询 ...

  7. python分析微博粉丝_新浪微博Python SDK笔记——获取粉丝列表或关注列表 | 学步园...

    上一节中创建了一个initclient包,封装了授权的过程,通过获取的myAPIClient对象可以直接调用API接口进行微博操作,上一节中就调用了发微博的接口发了一条新微博.这一节还是直接使用ini ...

  8. TK协议软件、粉丝列表、评论、关注源码功能介绍

    Tk协议.账号管理 "is_star": false, "birthday": "1900-01-01", "shield_dig ...

  9. Python爬虫:微博粉丝列表

    前言 本来打算做一个关于微博粉丝列表的爬虫,可以统计一下某个微博账号的粉丝里面,僵尸粉(水军)的数量,大V数量. 结果写完爬虫才发现,现在微博只给人看粉丝列表的前5页.......哈哈,好吧.挺无奈的 ...

最新文章

  1. Linux命令之top
  2. 利用requests库访问网站
  3. 深入理解Async/Await
  4. 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
  5. matlab与水库调度,蛙跳算法优化水库调度,全局迭代中最优解未更新
  6. 优秀渐变色彩应用PSD分层海报模板,大神都是这样玩渐变的,一看就懂
  7. Transfer: 99款高质量免费(X)HTML/CSS模板
  8. 曾惨遭 Google、Tesla 淘汰,辗转 8 个月,他是如何成为一名顶尖的 AI 工程师?...
  9. 追踪盗窃12亿用户登录数据的网络犯罪团伙
  10. Smith Numbers POJ - 1142 (暴力+分治)
  11. 如何做好需求变更管理?——需求变更流程规范
  12. Ubuntu老是提示系统内存空间不足---扩展内存方法
  13. 设置用户ID位是什么意思
  14. mac下idea选中多个相同内容的快捷键
  15. 论坛报名 | 群体智能
  16. Linux——vim/vi文本编辑器
  17. MT2503原理图芯片资料整合下载,MT2503处理器概述
  18. Drupal 修改主题详解
  19. 响应式页面的实现方式
  20. 移除字符串中多余的空格(包括中间多余空格及两头多余空格)

热门文章

  1. 脚本语言有哪些,如JavaScript、Scala、Python
  2. 大西北织梦模板网已测试
  3. LCP 16. 游乐园的游览计划
  4. L1-058 6翻了 (15分)(简洁)
  5. 两小灯同亮同灭c语言程序,基于C语言与Proteus联合仿真的单片机技术最新章节_何波,丘利丽著_掌阅小说网...
  6. 又一款知名云盘服务翻车:“免费不限量”变收费,用户被骗5年
  7. 实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解
  8. 【计算机网络】WebSocket 全双工通信协议
  9. Window 2008 iis7.5服务器批量导出网站列表技巧
  10. matlab指派问题优化,[原创] Matlab 指派问题模型代码