Factor out a distinct CacheEntry class