Persistent cache + expiration