前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot中RedisTemplate的RedisScript解析

SpringBoot中RedisTemplate的RedisScript解析

作者头像
蒋老湿
修改2019-12-09 14:41:30
7.6K0
修改2019-12-09 14:41:30
举报
文章被收录于专栏:技术栈

在RedisTemplate执行lua脚本如果做呢? 查看下面方法代码,这是引入lua内容脚本到RedisScript的子类DefaultRedisScript类中,这是redis提供支持的脚本支持类,更多内容可参考=>redis脚本参考

代码语言:txt
复制
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()方法中

通过方法重载,找到具体的执行类方法,主要有以下4步:

  1. execute()三个参数的方法
  2. execute()五个参数的方法
  3. execute()五个参数的方法体
  4. 最后eval()方法执行redis脚本命令

接下来进入到eval()方法的对应实现类DefaultScriptExecute中: 首先直接传sha值,如果在Redis中找不到预加载的lua脚本导致报错,则catch住该错误,把整个脚本序列化后传入Redis进行执行:

我们查看以下脚本序列化的执行代码scriptBytes(),其对应的执行类为StringRedisSerializer

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

至此,关于SpringBoot中RedisTemplate的RedisScript源码分析结束~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年09月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档