redis lua

898 阅读1分钟

使用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());