SpringBoot中RedisTemplate的RedisScript解析

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
在RedisTemplate执行lua脚本如果做呢?
查看下面方法代码,这是引入lua内容脚本到RedisScript
的子类DefaultRedisScript
类中,这是redis提供支持的脚本支持类,更多内容可参考=>redis脚本参考
protected RedisScript<Long> getRedisLockScript() {
String script = "local key = ARGV[1];local expiration = ARGV[2];local value = 1;";
script += "if redis.call('EXISTS', key) == 1 then return -1 else redis.call('SET', key, value);redis.call('EXPIRE', key, expiration);return 1;end";
return new DefaultRedisScript<>(script, Long.class);
}
这里可以通过查看execute方法查看执行的源码流程:

RedisTemplate.java
中的execute()
方法中

execute()
三个参数的方法execute()
五个参数的方法execute()
五个参数的方法体- 最后
eval()
方法执行redis脚本命令接下来进入到
eval()
方法的对应实现类DefaultScriptExecute
中: 首先直接传sha值,如果在Redis中找不到预加载的lua脚本导致报错,则catch住该错误,把整个脚本序列化后传入Redis进行执行:
我们查看以下脚本序列化的执行代码scriptBytes()
,其对应的执行类为StringRedisSerializer
类

StringRedisSerializer
类,可以看出该序列化操作其实就是字符串String序列化操作

至此,关于SpringBoot中RedisTemplate的RedisScript源码分析结束~
转载自:https://juejin.cn/post/6844903953134534670