I think you're missing the point. To obey the requested TTL you must check on get because the reaper may not have run yet, but the time the key should expire at has passed. Using a reaper approach is to optimize the timer management, not to break the TTL contract.