也有不用回调函数直接调用脚本的版本,但是经过我的测试之后,发现报错EvalSha is not supported in cluster environment
上锁解锁的代码比较简单,也好理解。利用lua脚本解释redis命令,保证命令一次性运行成功,从而保证命令执行的原子性。
但是想和业务系统结合起来还是有难度的。特别是在本地事务中去使用的时候,需要结合业务特点,本地事务提交之后解锁也要成功。
/**
* 获取锁
* @param lockKey
* @param value
* @param expireTime:单位-秒
* @return
*/
public static boolean getLock(String lockKey, String requestId, int expireTime) {
boolean ret = false;
try {
List keys = new ArrayList();
keys.add(lockKey);
List args = new ArrayList();
args.add(requestId);
args.add(expireTime + "");
String script = "if redis.call('setNx',KEYS[1],ARGV[1])==1 then return redis.call('expire',KEYS[1],ARGV[2]) else return 0 end";
Lo