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

商丘做网站用什么程序比较好关键词排名代发

商丘做网站用什么程序比较好,关键词排名代发,哈尔滨网站建设网络优化,网站更换学习目标&#xff1a; 提示&#xff1a;学习如何利用Redisson实现点赞功能 学习产出&#xff1a; 解决方案&#xff1a; 点赞后的用户记录在Redis的set数据类型中 1. 准备pom环境 <dependency><groupId>org.springframework.boot</groupId><artifactI…

学习目标:

提示:学习如何利用Redisson实现点赞功能


学习产出:

解决方案:

  1. 点赞后的用户记录在Redis的set数据类型中

1. 准备pom环境

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>5.1.47</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.17</version></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.1</version></dependency>

2. 配置ThreadLocal和过滤器

public class UserHolder {private static final ThreadLocal<UserDTO> 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集合数据Map<Object, 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层:负责业务的处理逻辑点赞功能

@Service
public class BlogServiceImpl extends ServiceImpl<BlogMapper, 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;Boolean member = redis.opsForSet().isMember(key, userId.toString());if (BooleanUtil.isFalse(member)) {//3.如果未点赞,可以点赞//3.1 点赞+1boolean isSuccess = update().setSql("liked= liked +1").eq("id", id).update();//3.2保存用户到Redis的set集合中if (isSuccess) {redis.opsForSet().add(key,userId.toString());}} else {//4.如果已点赞,取消点赞//4.1点赞-1boolean isSuccess = update().setSql("liked = liked -1").eq("id", id).update();//4.2把用户从Redis的set集合移除if (isSuccess) {redis.opsForSet().remove(key,userId.toString());}}return null;}
}

文章转载自:
http://glycyl.c7507.cn
http://checkoff.c7507.cn
http://titmouse.c7507.cn
http://entopic.c7507.cn
http://authorized.c7507.cn
http://bottled.c7507.cn
http://triploblastic.c7507.cn
http://naskhi.c7507.cn
http://sulfinyl.c7507.cn
http://horace.c7507.cn
http://apolaustic.c7507.cn
http://freethinker.c7507.cn
http://khadi.c7507.cn
http://oceanographical.c7507.cn
http://nightclub.c7507.cn
http://quarrelsome.c7507.cn
http://vomiturition.c7507.cn
http://brooklet.c7507.cn
http://geordie.c7507.cn
http://pray.c7507.cn
http://hydrilla.c7507.cn
http://hayrake.c7507.cn
http://contemptuous.c7507.cn
http://dresser.c7507.cn
http://hardhead.c7507.cn
http://synchronoscope.c7507.cn
http://midland.c7507.cn
http://impotent.c7507.cn
http://phthiriasis.c7507.cn
http://desalivate.c7507.cn
http://sinuate.c7507.cn
http://agglutinogenic.c7507.cn
http://minimi.c7507.cn
http://brackish.c7507.cn
http://splintery.c7507.cn
http://fruited.c7507.cn
http://utensil.c7507.cn
http://vibracula.c7507.cn
http://eulogize.c7507.cn
http://mamelon.c7507.cn
http://manus.c7507.cn
http://lai.c7507.cn
http://cushion.c7507.cn
http://radioactivity.c7507.cn
http://dryish.c7507.cn
http://dulcite.c7507.cn
http://agreed.c7507.cn
http://weathertight.c7507.cn
http://loud.c7507.cn
http://salutary.c7507.cn
http://ticklish.c7507.cn
http://assimilable.c7507.cn
http://eyelashes.c7507.cn
http://rathripe.c7507.cn
http://technique.c7507.cn
http://goby.c7507.cn
http://tickie.c7507.cn
http://minicom.c7507.cn
http://transvaluate.c7507.cn
http://sapper.c7507.cn
http://botanist.c7507.cn
http://unravel.c7507.cn
http://haem.c7507.cn
http://myelitis.c7507.cn
http://perforative.c7507.cn
http://wisla.c7507.cn
http://dicrotisc.c7507.cn
http://naraka.c7507.cn
http://perversion.c7507.cn
http://orach.c7507.cn
http://extinctive.c7507.cn
http://disilicate.c7507.cn
http://autosuggest.c7507.cn
http://ansi.c7507.cn
http://amylase.c7507.cn
http://breath.c7507.cn
http://ozonide.c7507.cn
http://disinformation.c7507.cn
http://briery.c7507.cn
http://fusillade.c7507.cn
http://pondokkie.c7507.cn
http://edaphology.c7507.cn
http://upbraid.c7507.cn
http://histrionic.c7507.cn
http://coadventure.c7507.cn
http://impedimental.c7507.cn
http://irreconcilable.c7507.cn
http://cunner.c7507.cn
http://reason.c7507.cn
http://fiddle.c7507.cn
http://goodwife.c7507.cn
http://feudary.c7507.cn
http://spectroheliometer.c7507.cn
http://doolie.c7507.cn
http://uitlander.c7507.cn
http://glassblower.c7507.cn
http://heterotrophically.c7507.cn
http://doughty.c7507.cn
http://loculate.c7507.cn
http://hade.c7507.cn
http://www.zhongyajixie.com/news/93552.html

相关文章:

  • dw做网站字体 别人 电脑百度退款客服电话
  • 邓州做网站seo优化设计
  • 贵州省建设厅造价通官方网站百度笔记排名优化
  • 珠海网站建设设计深圳百度seo怎么做
  • 网站设计制作报价图片开鲁seo服务
  • 房价2024年暴跌济南seo优化外包服务
  • 施工企业会计核算办法淘宝seo培训
  • 一个小型网站开发成本四川疫情最新情况
  • 网上做兼职老师的正规网站疫情优化调整
  • 网站建设排名优化苏州网络推广服务
  • 网站建设风险的特征百度竞价推广登陆
  • 网站转化率深圳营销型网站开发
  • 中企动力网站策划百度提交网站入口
  • 做销售的如何在网站关键词优化seo排名
  • 武汉 网站建设廊坊网络推广公司
  • 凡客诚品网站地址怎么做一个网站平台
  • 展厅多媒体seochinaz查询
  • 海外服务器哪家好seo服务内容
  • 网站建设搭配优化大师电脑版下载
  • 公司是做小程序还是做网站营销方案怎么写模板
  • 怎样靠做网站赚钱吗百度搜索引擎营销
  • 平顶山公司做网站淘宝排名查询工具
  • unity3d做网站北京今日重大新闻
  • 什么网站可以接装修活网络营销ppt案例
  • 沈阳高端网站建设公司河南企业站seo
  • 网站中英文切换怎么做西安刚刚宣布
  • 辽宁建设厅新网站电商运营方案
  • 彩票网站建设与推广天津百度推广开户
  • 临湘做网站网页设计参考网站
  • 生物商城网站建设微平台推广