local expiry = tonumber(ARGV[1]) * 1000 local previous_count = redis.call('get', KEYS[1]) local previous_ttl = redis.call('pttl', KEYS[1]) local current_count = redis.call('get', KEYS[2]) local current_ttl = redis.call('pttl', KEYS[2]) if current_ttl > 0 and current_ttl < expiry then -- Current window expired, shift it to the previous window redis.call('rename', KEYS[2], KEYS[1]) redis.call('set', KEYS[2], 0, 'PX', current_ttl + expiry) previous_count = redis.call('get', KEYS[1]) previous_ttl = redis.call('pttl', KEYS[1]) current_count = redis.call('get', KEYS[2]) current_ttl = redis.call('pttl', KEYS[2]) end return {previous_count, previous_ttl, current_count, current_ttl}