• Springboot Redis Lua脚本


    开门见山,首先定义一个lua脚本文件

     脚本文件内容:

    local key = KEYS[1]
    local val = redis.call("get", key)
    if val == false or tonumber(val) < 1 then
        return false
    else
        redis.call("decr", key)
        return true
    end

    脚本只是做了一个查询和递减的操作,在项目中用于防止查询和递减操作之间发生并发。

    再定义一个Redis配置文件:

    @Configuration
    public class RedisLuaConfig {
    
        @Bean
        public DefaultRedisScript<Boolean> getAndDecr() {
            DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>();
            redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/getAndDecr.lua")));
            redisScript.setResultType(Boolean.class);
            return redisScript;
        }
    
    }

    在项目中使用:

    @Autowired
    private DefaultRedisScript<Boolean> getAndDecr;
    private boolean getAndDecr(String key) { List<String> key = Collections.singletonList(key); Boolean execute = redisTemplate.execute(getAndDecr, key); if (null == execute) { return false; } return execute; }
  • 相关阅读:
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    Xcode5下去除Icon高光
    Unity3D-基本导航(NavMesh)功能实现
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/16080230.html
Copyright © 2020-2023  润新知