redis实现分布式锁3,编写lua脚本

image

image

-- 比较线程标识和锁中的标识是否一致
if(redis.call('get',KEY[1]) == ARG[1]) then
    -- 释放锁 del key
    return redis.call('del',KEY[1])
end
return 0
private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;
    static {
        UNLOCK_SCRIPT = new DefaultRedisScript<>();
        UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));
        UNLOCK_SCRIPT.setResultType(Long.class);
    }


  @Override
    public void unlock() {
        // 调用lua脚本
        stringRedisTemplate.execute(
                UNLOCK_SCRIPT,
                Collections.singletonList(KEY_PREFIX + name),
                ID_PREFIX + Thread.currentThread().getId());
    }
posted @ 2025-12-25 15:41  雨花阁  阅读(1)  评论(0)    收藏  举报