用lua脚本使用redis是为了保证其原子性和线程安全。
step1:编写lua脚本,放在resource中
step2:创建脚本对象,这里因为脚本对象是静态的所以在静态代码块中进行构造
-
setLocation: 这里的ClassPathResource会从类路径(通常是resources文件夹)读取文件。 -
setResultType(Long.class): 对应 Lua 脚本最后的return。
step3:执行lua脚本
RedisScript<T> script脚本对像
Keys 输入Key数组参数
args 输入args数组参数

java
private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;
static {
UNLOCK_SCRIPT = new DefaultRedisScript<>();
UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));
UNLOCK_SCRIPT.setResultType(Long.class);
}
public void unlock() {
// 调用lua脚本
stringRedisTemplate.execute(
UNLOCK_SCRIPT,
Collections.singletonList(KEY_PREFIX + name),
ID_PREFIX + Thread.currentThread().getId());
}