Redis实现分布式锁设计

一、实现相关类

RetryStrategy:重试策略接口,含是否重试及重试次数;获取重试时间间隔两个接口。

DefaultRetryStrategy:默认重试策略,设置默认重试次数3次,重试间隔100ms。

RedisLock:加锁及释放锁,实质即操作redis set key 和del key;

SimpleRedisLock:调用redisLock加锁,加锁后执行lockCode代码(加锁后需执行的代码逻辑),并在加锁失败后判断是否有重试逻辑。

二、加锁流程

设计巧妙之处:

1、采用LockCode函数式接口承载加锁后需执行的业务代码逻辑,作为入参传入excute方法

2、excute中,采用循环加锁成功后执行lockCode.run完毕后,return;加锁失败判断是否传入重试策略,具体通过当前线程sleep重试策略中重试间隔ms数;最后通过循环次数与重试次数的大小判断,返回是否继续重试。

3、finally中执行锁释放。

三、总结

1、加锁RedisLock、加锁后执行的业务代码逻辑LockCode、加锁失败重试策略RetryStrategy 通过SimpleRedisLock的execute一气呵成。

2、写得好的代码,从类的结构设计、到类间通过接口或其他类的关联就像人体的四肢与内陆脉络一样既无关,又相关。

简单总结,提供思路,代码不便贴出。


猜你喜欢

转载自blog.csdn.net/daybreak1209/article/details/80437279