Redis使用lua脚本实现increase + expire 的原子操作

lua脚本:

public Integer incrEX(String key, long defaultExpire){

        String script = "local current = redis.call(incr,KEYS[1]);" +
                " local t = redis.call(ttl,KEYS[1]); " +
                "if t == -1 then  " +
                "redis.call(expire,KEYS[1],ARGV[1]) " +
                "end; " +
                "return current";

        Object result = jedisCluster.eval(script, Collections.singletonList(key), Collections.singletonList(String.valueOf(defaultExpire)));
        return Integer.valueOf(result.toString());

    }
lua脚本: public Integer incrEX(String key, long defaultExpire){ String script = "local current = redis.call(incr,KEYS[1]);" + " local t = redis.call(ttl,KEYS[1]); " + "if t == -1 then " + "redis.call(expire,KEYS[1],ARGV[1]) " + "end; " + "return current"; Object result = jedisCluster.eval(script, Collections.singletonList(key), Collections.singletonList(String.valueOf(defaultExpire))); return Integer.valueOf(result.toString()); }
经验分享 程序员 微信小程序 职场和发展