分布式锁

发布时间 2023-12-19 10:21:40作者: 梅丹隆

一、为什么使用分布式锁

image.png
保障集群服务的一致性

二、Redis 分布式锁实现

1、Java客户端现有问题

在程序运行结束和释放锁的两步操作中会存在时间窗口,可能存在线程不安全问题

2、使用Lua脚本实现

-- 目标:获取缓存值,如值与预期相等,则释放分布式锁

-- Lua 内置了一个 redis 对象,其中 call 方法是调用 redis 相关的命令
-- 内置了 KEYS ARGV 两个数组,用来演示传递参数

if redis.call('get', KEYS[1]) == ARGV[1] then
  return redis.call('del', KEYS[1])
else
  return 0
end

Java客户端如何调用Lua脚本?

3、Redisson 的分布式锁实现