ARC solves this problem by putting newly cached data in a probationary state. If it is accessed a second time, it gets out of probation and is put into the main cache. A single pass through the database flushes the probationary cache, not the main cache.
Adaptive replacement cache eviction algorithm. Addressed the above (assuming robots don't double-hit the cached data ;) )