当前位置: 首页 > 科技观察

SpringBoot+Redis实现分布式锁,还有谁不会?

时间:2023-03-12 00:34:59 科技观察

1。业务背景一些业务请求是比较耗时的操作,需要加锁以防止后续的并发操作。同时,对数据库数据的操作需要避免影响之前的业务。2、分析过程使用Redis作为分布式锁,将锁的状态放在Redis中统一维护,解决了集群中单机JVM之间信息不兼容的问题,规定了操作顺序,保护了正确性的用户数据。梳理设计流程新建注解@interface,在注解中设置input标志增加AOP切点,扫描具体注解建立@Aspect切面任务,注册bean并拦截具体方法参数ProceedingJoinPoint,并在方法pjp.proceed()截取切入点之前和之后进行锁定,任务执行完成后删除key。核心步骤:加锁、解锁、继续使用RedisTemplate的opsForValue.setIfAbsent方法判断是否有key,并设置一个随机数UUID.random().toString,生成一个随机数作为value。从redis获取锁后,给key设置expire过期时间,过期后自动释放锁。按照这种设计,只有第一次请求成功设置Key才能进行后续的数据操作,后续请求无法获取