1. 程式人生 > >redis lua指令碼學習

redis lua指令碼學習

在實際的專案開發中,使用lua指令碼能夠減少對於redis的訪問次數,提高效率,下面通過一個入門級的例子來對redis中的lua指令碼進行介紹:

public class RedisTemplateLua {

  public static void main(String[] args) {
    //
      ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-redis.xml");
      final RedisTemplate<String,String> redisTemplate = applicationContext.
              getBean("redisTemplate",RedisTemplate.class);

      //建立預設的指令碼物件
      DefaultRedisScript<Boolean> script=new DefaultRedisScript<>();
      //設定預設的指令碼資料來源
      ClassPathResource resource=new ClassPathResource("test.lua");
      //建立完畢
      script.setScriptSource(new ResourceScriptSource(resource));
      //設定返回值的型別
      script.setResultType(Boolean.class);
      String key="test";
      redisTemplate.delete(key);
      redisTemplate.opsForValue().set(key,"yalishadaa");
      List<String> keys=new ArrayList();
      keys.add("test");
      Boolean result=redisTemplate.execute(script,keys,new String[]{"yalishadaa","lala"});
      System.out.println(result);
      System.out.println(redisTemplate.opsForValue().get(key));
  }
}

Lua指令碼如下:

 local current = redis.call('get', KEYS[1])
 if current == ARGV[1]
   then redis.call('set', KEYS[1], ARGV[2])
   return true
 end
 return false
編寫指令碼的關鍵點在於明白KEYS[1...n]以及ARGV[1...n]表示的意義,KEYS表示傳遞過來的list中儲存的鍵值,而ARGV表示傳遞的引數。理解這兩點,lua指令碼的編寫將會非常簡單。