@Override public GetAccessTokenResult getAccessToken(Iterable<String> scopes) { MemcacheService memcache = MemcacheServiceFactory.getMemcacheService(MEMCACHE_NAMESPACE); String memcacheKey = memcacheKeyForScopes(scopes); GetAccessTokenResult result; Object memcacheResult = memcache.get(memcacheKey); if (memcacheResult != null) { result = (GetAccessTokenResult) memcacheResult; } else { result = getAccessTokenUncached(scopes); Date memcacheExpiration = new Date(result.getExpirationTime().getTime() - 300000); memcache.put(memcacheKey, result, Expiration.onDate(memcacheExpiration)); } return result; }