  In any caching system, the admission and eviction policies determine which
contents are added and removed from a cache when a miss occurs. Usually, these
policies are devised so as to mitigate staleness and increase the hit
probability. Nonetheless, the utility of having a high hit probability can vary
across contents. This occurs, for instance, when service level agreements must
be met, or if certain contents are more difficult to obtain than others. In
this paper, we propose utility-driven caching, where we associate with each
content a utility, which is a function of the corresponding content hit
probability. We formulate optimization problems where the objectives are to
maximize the sum of utilities over all contents. These problems differ
according to the stringency of the cache capacity constraint. Our framework
enables us to reverse engineer classical replacement policies such as LRU and
FIFO, by computing the utility functions that they maximize. We also develop
online algorithms that can be used by service providers to implement various
caching policies based on arbitrary utility functions.
