public class Console {
public static void main(String[] args) {
Config config = new Config();
config.setLockWatchdogTimeout(10000);
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redissonClient = Redisson.create(config);
List<Object> keys = new ArrayList<>();
keys.add("txk");
Object[] values=new Object[]{1};
Object eval = redissonClient.getScript().eval(READ_WRITE, RedisLua.LIMIT_LUA_STRING, RScript.ReturnType.INTEGER, keys, values);
System.out.println(eval);
}
static class RedisLua {
public static final String LIMIT_LUA_STRING;
static {
StringBuilder limitLuaString =new StringBuilder();
limitLuaString.append(" local key = KEYS[1]");
limitLuaString.append("
local limit = tonumber(ARGV[1])");
limitLuaString.append("
local curentLimit = tonumber(redis.call('get', key) or "0")");
limitLuaString.append("
if curentLimit + 1 > limit then");
limitLuaString.append("
return 0");
limitLuaString.append("
else");
limitLuaString.append("
redis.call("INCRBY", key, 1)");
limitLuaString.append("
redis.call("EXPIRE", key, ARGV[2])");
limitLuaString.append("
return curentLimit + 1");
limitLuaString.append("
end");
LIMIT_LUA_STRING=limitLuaString.toString();
}
}
}