SpringBoot通過RedisTemplate執行Lua腳本
阿新 • • 發佈:2019-04-28
spring ash count blog object rate ces star map
如果你對Redis和Lua的關系不太清楚,請先閱讀:Redis進階之使用Lua腳本開發
1.RedisScript
首先你得引入spring-boot-starter-data-redis依賴,其次把lua腳本放在resources目錄下。
@Bean public DefaultRedisScript<List> defaultRedisScript() { DefaultRedisScript<List> defaultRedisScript = new DefaultRedisScript<>(); defaultRedisScript.setResultType(List.class); defaultRedisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("redis/demo.lua"))); return defaultRedisScript; }
在Spring Boot2.0的時候,上述配置沒有問題,但在Spring Boot1.5測試會出錯,需要將List.class改為具體的返回類型(如Long.class)。
RedisScript的getSha1()方法可以獲取腳本摘要。
2.調用腳本
/** * List設置lua的KEYS */ List<String> keyList = new ArrayList(); keyList.add("count"); keyList.add("rate.limiting:127.0.0.1"); /** * 用Mpa設置Lua的ARGV[1] */ Map<String, Object> argvMap = new HashMap<String, Object>(); argvMap.put("expire", 10000); argvMap.put("times", 10); /** * 調用腳本並執行 */ List result = redisTemplate1.execute(redisScript, keyList, argvMap); System.out.println(result);
若是出現序列化問題,可以指定序列化方式。
public <T> T execute(RedisScript<T> script, RedisSerializer<?> argsSerializer, RedisSerializer<T> resultSerializer, List<K> keys, Object... args) { return scriptExecutor.execute(script, argsSerializer, resultSerializer, keys, args); }
SpringBoot通過RedisTemplate執行Lua腳本