分布式锁的封装也很有讲究呀
分布式锁通常有很多选择,基于 Redis 的,基于 Zookeeper 的,基于数据库等等方案。 Redis 用于缓存数据,在项目中都有使用,所以使用 Redis 来做分布式锁的会稍微多些。 如果用 Redis 来做锁,可以直接用开源的方案,比如redisson。 最常见的使用方式如下所示: RLock lock = redisson.getLock("anyLock");lock.lock();run();lock.unlock(); 获取锁对象,调用 lock()加锁,执行业务逻辑,调用 unlock()释放锁。 尽管框架提供的使用方式已经很简洁了,但是我们还是有必要对锁做一层包装。做包装的目的是为了提高扩展性和易用性。 抽象接口 如果说我们直接使用 redisson 的原生 API 做加锁,那么很多地方都会出现 RLock 相关的代码,突然有一天,由于某些原因,需要将锁进行替换,这个时候改动的范围就比较大了。每个使用了 RLock 的地方都得改。 如下图:很多 Service 都用到了 RLock.lock()方法,当我们需要替换锁的时候,所有涉及到的类和方法都得修改,改动的点如...
