分布式锁
背景思路图实现代码定时器代码
背景
微服务在当今大行其道,在分布式工程中开发定时器时,需要用到分布式锁。分布式锁有多种实现方式,相对简单的应该是用redis实现了。
思路图
实现代码
public class LockUtil {
public static final String LOCK_PREFIX
= "redis_lock_";
private static final RedisTemplate REDIS_TEMPLATE
= SpringUtil
.getBean("redisTemplate",RedisTemplate
.class);
public static boolean lock(String key
, String value
) {
long timeout
= 5*60 * 1000;
return Optional
.ofNullable(REDIS_TEMPLATE
.opsForValue().setIfAbsent(LOCK_PREFIX
+ key
, value
, timeout
, TimeUnit
.MILLISECONDS
)).orElse(false);
}
public static void delete(String key
) {
REDIS_TEMPLATE
.delete(LOCK_PREFIX
+ key
);
}
}
定时器代码
@Scheduled(cron
= DEFAULT_CRON
)
public void startToDo() {
String key
= "lock";
if (LockUtil
.lock(key
, key
)) {
doSomething();
LockUtil
.delete(key
);
}
}