refactor CacheWrapper into separate caching strategies