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

网站群建设厂家北京网页设计公司兴田德润优选

网站群建设厂家,北京网页设计公司兴田德润优选,wordpress 主题 英文版,山东省工程建设造价信息网站学习目标#xff1a; 提示#xff1a;学习如何利用Redisson实现点赞排行榜功能#xff0c;按照时间顺序 当用户给某一篇文章点赞后#xff0c;会再数据库中存储一条数据#xff0c;并且在Redis中存储一条数据为当前博客的点赞用户标识#xff0c;来区分哪个用户对文章进…学习目标 提示学习如何利用Redisson实现点赞排行榜功能按照时间顺序 当用户给某一篇文章点赞后会再数据库中存储一条数据并且在Redis中存储一条数据为当前博客的点赞用户标识来区分哪个用户对文章进行了点赞使用ZSet数据结构对点赞用户进行排序来实现排行榜功能 学习产出 解决方案 点赞后的用户记录在Redis的set数据类型中 1. 准备pom环境 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scopeversion5.1.47/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.3/version/dependency!--hutool--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.17/version/dependencydependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.23.1/version/dependency2. 配置ThreadLocal和过滤器 public class UserHolder {private static final ThreadLocalUserDTO tl new ThreadLocal();public static void saveUser(UserDTO user){tl.set(user);}public static UserDTO getUser(){return tl.get();}public static void removeUser(){tl.remove();} }Configuration public class MvcConfig implements WebMvcConfigurer {Autowiredprivate StringRedisTemplate redis;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(/user/code,/user/login,/blog/hot,/shop/**,/shop-type/**,/voucher/**).order(2);registry.addInterceptor(new RefreshTokenInterceptor(redis)).addPathPatterns(/**).order(1);} } --------------------------------------------- Slf4j public class LoginInterceptor implements HandlerInterceptor {//controller执行之前Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.判断是否需要拦截ThreadLocalif (UserHolder.getUser()null) {response.setStatus(401);return false;}//7.放行return true;}//渲染后返回给前台数据前Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//移除用户避免内存泄露UserHolder.removeUser();} } --------------------------------------------------- Slf4j public class RefreshTokenInterceptor implements HandlerInterceptor {//这个对象不是由spring管理的所以不能用注解自动注入private StringRedisTemplate redis;public RefreshTokenInterceptor(StringRedisTemplate redis) {this.redis redis;}//controller执行之前Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.获取请求头中的tokenString token request.getHeader(authorization);if (StrUtil.isBlank(token)) {return true;}//2.基于token获取redis中的用户//通过key取到hash中的map集合数据MapObject, Object userMap redis.opsForHash().entries(login:token: token);//3.判断用户是否存在if (userMap.isEmpty()) {return true;}//5.将查询到的hash数据转为userDto对象UserDTO userDTO BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);//6.存在保存用户信息到ThreadLocal中UserHolder.saveUser(userDTO);//7.刷新token有效期redis.expire(LOGIN_USER_KEY token, 30, TimeUnit.MINUTES);log.info(我是第一个拦截器当前拦截所有请求的用户为线程为{},{},UserHolder.getUser(),Thread.currentThread());//8.放行return true;}3. Controller层负责接收请求和向下分配 RestController RequestMapping(/blog) public class BlogController{Resourceprivate IBlogService blogService;PutMapping(/like/{id})public Result likeBlog(PathVariable(id) Long id) {return blogService.likeBlog(id);} }4. Service层负责业务的处理逻辑点赞功能将文章的点赞用户以时间戳为分数存入Redis Service public class BlogServiceImpl extends ServiceImplBlogMapper, Blog implements IBlogService {Autowiredprivate IUserService userService;Resourceprivate StringRedisTemplate redis;Overridepublic Result likeBlog(Long id) {//1.获取登录用户Long userId UserHolder.getUser().getId();//2.判断当前用户是否已经点赞String key blog:liked: id;//获取当前登录用户的分数若文章中的用户id分数为null说明未点赞Double score redis.opsForZSet().score(key, userId.toString());if (score null) {//3.如果未点赞可以点赞//3.1 点赞1boolean isSuccess update().setSql(liked liked 1).eq(id, id).update();//3.2保存当前点赞用户到Redis的文章set集合中文章set集合中记录的是点赞用户的id//分数是时间戳可以进行排序if (isSuccess) {//存入Redis的分数值以当前时间戳存入redis.opsForZSet().add(key, userId.toString(), System.currentTimeMillis());}} else {//4.如果已点赞取消点赞//4.1点赞-1boolean isSuccess update().setSql(liked liked -1).eq(id, id).update();//4.2把用户从Redis的set集合移除if (isSuccess) {redis.opsForZSet().remove(key, userId.toString());}}return null;} }5. 上述为下面的排行榜做铺垫 查询当前文章的点赞排行榜id是文章id号 PutMapping(/likes/{id})public Result likesBlog(PathVariable(id) Long id) {return blogService.queryBlogLikes(id);}Overridepublic Result queryBlogLikes(Long id) {String keyblog:liked: id;//取出前五条数据SetString rangeData redis.opsForZSet().range(key, 0, 4);if (rangeDatanull) {return Result.ok(Collections.emptyList());}//将文章点赞的前五条用户id转换为Long类型ListLong ids rangeData.stream().map(Long::valueOf).collect(Collectors.toList());String idStr StrUtil.join(,, ids);//去数据库把这些用户查询出来并且数据脱敏返回给前端ListUser users userService.query().in(id,ids).last(order by field(id,idStr)).list();UserDTO userData BeanUtil.copyProperties(users, UserDTO.class);return Result.ok(userData);}
http://www.hkea.cn/news/14341849/

相关文章:

  • 潍坊 开发区网站建设商标查询官网入口免费
  • 合肥制作网站企业温州中小企业网站制作
  • 南昌商城网站建设公司wordpress 返回顶部 插件
  • 深圳光明建设局官方网站如何制作一个属于自己的网站
  • 网站开发哪家公司好网站建设要考虑哪些方面
  • 小游戏网站建设4399游戏官网
  • 电子商务中网站开发wordpress关闭功能
  • 佛山seo网站优化免费项目发布平台
  • 网站改版的费用wordpress小程序后台
  • dede织梦网站成都创意网站设计
  • 先进的网站建设wordpress如何显示摘要
  • 青春网页制作素材百度快速优化软件
  • 如何做旅游网站推广百度识图 上传图片
  • 深圳品牌网站策划红色php企业网站模板下载
  • php 网站做分享功能有没有找项目的网站
  • 公司做企业网站的必要性海南州建设厅官方网站
  • 深圳专业网站开发公司wordpress备案号格式
  • 电子商务网站建设期末试题答案05个人博客网页制作模板田田田田田田田田田田
  • 云南网站制作案例公司网站建设 上海
  • 电子厂网站建设方案书怎么写顺德网站开发招聘
  • 大学学校类网站设计韩国设计app网站有哪些
  • 小组用jsp做的网站论文汕头代理注册公司
  • 做网站好公司手机端网站开发多少钱
  • 2018做网站用什么开发做雕塑网站找哪家好
  • 家用宽带怎么做网站 访问企业外贸营销型网站
  • 启动网站建设的请示企业备案网站名称要求
  • 网站设计公司 知道万维科技东莞网站建设制作
  • 如何做双语网站建筑企业登录哪个网站
  • 微网站建设市场专业制作网站价格
  • 自学软件网站开发芜湖网站制作公司