Caching through an IO interface invariably requires serializing and deserializing the cached keys and values to bytes. This inherently requires duplicating the data, so it doesn't need owned access to the keys or values.
The interface to IOCached would require much less (unnecessary) cloning if the key and value parameters to set_cache were borrowed instead of owned.