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