使用Jedis clien进行lua脚本的相关操作,同时也使用一部分jedis提供的具有原子性set操作来完成值和过期时间的同时设置。使用lua脚本根本原因也是为了保证我们两个redis操作之间的原子性,使分布式锁更加可靠。
1.redis使用lua脚本
Jedis jedis = new Jedis("127.0.0.1", 6379);
Object eval = jedis.eval("return redis.call('set', 'foo', 'bbb')");
对于多命令的可以使用mset命令
Object eval = jedis.eval("return redis.call('mset', KEYS[1], KEYS[2], ARGV[1], ARGV[2])", 2, "111", "222", "aaaa", "bbbb");
2.redis使用lua文件
resources下新增文件test.lua
内容为:
redis.call('set', 'a', 1);
redis.call('set', 'b', 2);
redis.call('set', 'c', 3);
redis.call('set', 'd', 4);
redis.call('set', 'e', 5);
redis.call('set', 'f', 6);
redis.call('set', 'g', 7);
redis.call('set', 'h', 8);
redis.call('set', 'i', 9);
redis.call('set', 'j', 10);
redis.call('set', 'k', 11);
redis.call('set', 'l', 12);
redis.call('set', 'm', 13);
java文件如下
String fileName = jedis.getClass().getClassLoader().getResource("test.lua").getPath();
System.out.println(fileName);
FileReader reader = new FileReader(new File(fileName));
BufferedReader bufferedReader=new BufferedReader(reader);
String lineStr = "";
StringBuilder text = new StringBuilder();
while ((lineStr = bufferedReader.readLine()) != null) {
text.append(lineStr);
}
System.out.println(text.toString());
Object eval2 = jedis.eval(text.toString());