redis lua指令碼學習
阿新 • • 發佈:2019-02-17
在實際的專案開發中,使用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指令碼的編寫將會非常簡單。