RedisLock的AOP实现

问题:

两次点击过快导致新增操作插入相同数据。

 

 

AOP的使用:

1.标注@Aspect,说明此类是切面类。

可以先用@Pointcut定义一个表达式。然后在@Around中引用这个@Pointcut的方法。

更常见的是直接在Around里面定义。

@Around("@annotation(注解的位置)")

@anootation:注解带有xxx的。

@args:参数带有xxx的。

@within/@target:标识生效的具体类型,多个参数&&起来。

 

AnnotationUtils.findAnnotation : 从方法中获取注解,查询是否有我们自定义注解。
如果为空,返回执行被调用方法。如果不为空判断是否上锁。
通过stringRedisTemplate.opsForValue().setIfAbsent 进行判断,这个方法仅在为空的时候设置,如果为true则设置成功,执行调用的方法,执行完毕后删除redis锁。如果不成功
这说明已经存在,无法再次调用 这里用了finally,不管方法执行结果如何,最终是一定要保证删除key

posted @ 2024-01-18 13:36  NobodyHero  阅读(21)  评论(0编辑  收藏  举报