码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot通过RedisTemplate执行Lua脚本

时间:2019-04-28 20:38:31      阅读:1189      评论:0      收藏:0      [点我收藏+]

标签:sha1   .class   public   返回   count   rgs   limit   方法   依赖   

如果你对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脚本

标签:sha1   .class   public   返回   count   rgs   limit   方法   依赖   

原文地址:https://www.cnblogs.com/yueshutong/p/10786163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!