分布式锁,简单来说就是锁,而且还是适合分布式环境的。分布式说起来也很奇怪,要是有什么不能共享的东西,那就抽出来共享。比如本地数据缓存不能共享,那么就抽出一个如redis之类的东西,进行共享。session不能共享,那么就将session抽出来,丢到redis之类的东西,又能共享了。 锁不能共享,同样可以丢一个标记到redis,由于redis是单线程的,所以也不用担心redis的线程安全的问题。
由于自己去实现redis的分布式锁,是比较困难的问题,还要考虑redis复制,宕机之类的问题,所以我们使用一个比较优秀的开源项目 **redisson**来实现我们的分布式锁 被`@RedisLock`所注解的方法,会被 `RedisLockAspect` 进行切面管理,代码如下: ```java @Around("@annotation(redisLock)") public Object around(ProceedingJoinPoint joinPoint, RedisLock redisLock) throws Throwable { String spel = redisLock.key(); String lockName = redisLock.lockName(); // redissonClient 也就是通过redisson 进行对锁管理 RLock rLock = redissonClient.getLock(getRedisKey(joinPoint,lockName,spel)); rLock.lock(redisLock.expire(),redisLock.timeUnit()); Object result = null; try { //执行方法 result = joinPoint.proceed(); } finally { rLock.unlock(); } return result; } ```