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; }

 

posted @ 2022-03-31 09:11  御简  阅读(182)  评论(0编辑  收藏  举报