If a TTL cache composes another cache, the presence of a key has to be checked both against the TTL list and the composed cache. Otherwise, the TTL cache could say that an item is still present (because the TTL has not yet expired), but the item is removed from the composed cache. In such a case, a user will get a true from has? but a nil from lookup (because the key is no longer present in the composed cache).
Any platform. Clojure v1.8; core.cache v0.6.5