在Redis新建lua文件夹,并写脚本
vi releasewherevalueequal.lua
if redis.call("get",KEYS[1])==ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
接下来,给 Lua 脚本求一个 SHA1 和,命令如下:
cat lua/releasewherevalueequal.lua | redis-cli -a hx script load --pipe
新建Redis类
package org.hx.distribute_lock;
import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Redis {
private JedisPool jedisPool;
public Redis(){
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxIdle(300);
config.setMaxTotal(1000);
config.setMaxWaitMillis(10000);
config.setTestOnBorrow(true);
jedisPool = new JedisPool(config,"192.168.133.8",6379,10000,"hx");
}
public void execute(CallwithJedis callwithJedis){
try(Jedis jedis = jedisPool.getResource()){
callwithJedis.call(jedis);
}
}
}
新建LuaTest类
package org.hx.distribute_lock;
import redis.clients.jedis.params.SetParams;
import java.util.Arrays;
import java.util.UUID;
public class LuaTest {
public static void main(String[] args) {
Redis redis = new Redis();
for (int i = 0; i < 2; i++) {
redis.execute(jedis -> {
String value = UUID.randomUUID().toString();
String k1 = jedis.set("k1",value,new SetParams().nx().ex(5));
if(k1 != null && "OK".equals(k1)){
jedis.set("site","www.baidu.com");
String site = jedis.get("site");
System.out.println(site);
jedis.evalsha("b8059ba43af6ffe8bed3db65bac35d452f8115d8", Arrays.asList("k1"),Arrays.asList(value));
}else{
System.out.println("没拿到锁");
}
});
}
}
}