SpringBoot通过RedisTemplate执行Lua脚本的方法步骤

所属分类: 软件编程 / java 阅读数: 53
收藏 0 赞 0 分享

lua 脚本

Redis 中使用 lua 脚本,我们需要注意的是,从 Redis 2.6.0后才支持 lua 脚本的执行。

使用 lua 脚本的好处:

原子操作:lua脚本是作为一个整体执行的,所以中间不会被其他命令插入。
减少网络开销:可以将多个请求通过脚本的形式一次发送,减少网络时延。
复用性:lua脚本可以常驻在redis内存中,所以在使用的时候,可以直接拿来复用,也减少了代码量。

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); } 

3.Lua脚本

--获取KEY local key1 = KEYS[1] local key2 = KEYS[2] --

获取ARGV[1],这里对应到应用端是一个List<Map>. -- 注意,这里接收到是的字符串,所以需要用csjon库解码成table类型 local

receive_arg_json = cjson.decode(ARGV[1]) --获取ARGV内的参数并打印 local expire = 
receive_arg_json.expire local times = receive_arg_json.times 

以上所述是小编给大家介绍的SpringBoot通过RedisTemplate执行Lua脚本的方法步骤,希望对大家有所帮助!

更多精彩内容其他人还在看

java 中maven pom.xml文件教程详解

这篇文章主要介绍了java 中maven pom.xml文件教程详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

spring boot整合netty的实现方法

这篇文章主要介绍了spring boot整合netty的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Netty与Spring Boot的整合实现

这篇文章主要介绍了Netty与Spring Boot的整合的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring动态加载bean后调用实现方法解析

这篇文章主要介绍了Spring动态加载bean后调用实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现画图板上画一条直线

这篇文章主要为大家详细介绍了java实现画图板上画一条直线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java通过python命令执行DataX任务的实例

今天小编就为大家分享一篇Java通过python命令执行DataX任务的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

springBoot集成redis的key,value序列化的相关问题

这篇文章主要介绍了springBoot集成redis的key,value序列化的相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java实现登录案例

这篇文章主要为大家详细介绍了java实现登录案例的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java解决请求跨域的两种方法

这篇文章主要为大家详细介绍了java解决请求跨域的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringBoot集成Beetl后统一处理页面异常的方法

这篇文章主要介绍了SpringBoot集成Beetl后统一处理页面异常的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多