Redis实现分布式锁的最简单方式

    技术2022-07-11  118

    分布式锁

    背景思路图实现代码定时器代码

    背景

    微服务在当今大行其道,在分布式工程中开发定时器时,需要用到分布式锁。分布式锁有多种实现方式,相对简单的应该是用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) { //超时时间5分钟(也就是说获取成功后,5分钟内,只能执行一次) long timeout = 5*60 * 1000; //执行set命令(用optional判空,默认返回false),set成功说明获取成功,set失败说明获取锁失败(一行代码搞定,我就问简单不?) return Optional.ofNullable(REDIS_TEMPLATE.opsForValue().setIfAbsent(LOCK_PREFIX + key, value, timeout, TimeUnit.MILLISECONDS)).orElse(false); } /** * 删除锁 * * @param key */ 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); } }
    Processed: 0.014, SQL: 9