zoukankan      html  css  js  c++  java
  • SpringBoot通过RedisTemplate执行Lua脚本

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    如果你对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.setScriptText("");
        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脚本

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    --获取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
    

    参考:https://blog.csdn.net/fsw4848438/article/details/81540495

    版权声明

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

  • 相关阅读:
    Android Glide详细使用教程
    mac上cocoapods安装与卸载
    Struts2+AJAX+JQuery 实现用户登入与注册功能
    Eclipse+ADT+Android SDK 搭建安卓开发环境
    CVE-2018-7600 Drupal核心远程代码执行漏洞分析
    利用kage把msf变成可视化远控平台
    在Red Hat Enterprise Linux 7.3上安装SQL Server 2017
    计算机取证之你必须要会用的24款工具
    StackStorm利用CORS null origin获得RCE (CVE-2019-9580)
    iOS/OSX漏洞分析和再现:CVE-2019-7286
  • 原文地址:https://www.cnblogs.com/onblog/p/13044283.html
Copyright © 2011-2022 走看看