有些业务请求,轻松属于耗时操作,实现锁需要加锁,布式防止后续的注解并发操作,同时对数据库的轻松数据进行操作,需要避免对之前的实现锁业务造成影响。
使用 Redis 作为分布式锁,注解将锁的轻松状态放到 Redis 统一维护,亿华云解决集群中单机 JVM 信息不互通的实现锁问题,规定操作顺序,布式保护用户的注解数据正确。
加锁
使用了 RedisTemplate 的 opsForValue.setIfAbsent 方法,亿华云计算判断是否有 key,设定一个随机数 UUID.random().toString,生成一个随机数作为 value。
从 redis 中获取锁之后,对 key 设定 expire 失效时间,到期后自动释放锁。
按照这种设计,只有第一个成功设定 Key 的请求,才能进行后续的数据操作,后续其它请求由于无法获得
源码库