Start with a dumb-cache using "FIFO" (first in/first out)
Keep track of anything with "hits" while in the cache (simple boolean/bitmap instead of complicated locks/data structures)
Re-insert "hit" items when they would normally be evicted/age out (Lazy Promotion).
BTW, also have a mini-cache in front of the main cache (10% of cache size) which tries to "drop off quickly" (effectively: must have a "hit" within first 10% of being cached).
BTW, also keep track of a "ghost cache" ("hits only", not contents??) for the duration of the overall FIFO-cache, and use that to guide eviction/re-insertion. I'm a little bit unclear on this aspect, but it seems like an "obvious in retrospect" set of guidance.