SpringBoot通过RedisTemplate执行Lua脚本
Posted yueshutong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot通过RedisTemplate执行Lua脚本相关的知识,希望对你有一定的参考价值。
如果你对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脚本的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 使用 RedisTemplate Cluster集群的正确姿势(万字图文)
springboot整合redis——redisTemplate的使用
SpringBoot中注入RedisTemplate实例异常解决