LFU has a weakness, and it is the reason LRU is still the common default. A plain LFU count remembers the past too well. A news story read 50,000 times yesterday has a huge count. A new story read twice this morning has a count of 2, so LFU evicts the new story. The popular thing is no longer popular, but the count does not know. Real LFU caches, such as Redis's allkeys-lfu, use a counter that decays over time to fix this.
LRU has no such memory. When the set of hot keys moves, LRU follows it at once. So use LRU when popularity changes quickly, for example with fresh news, trending items or session data. Consider LFU, or a policy with an LFU filter, when popularity stays stable for days.
A full scan is the other case people worry about. A nightly export or a crawler touches every key once. To LRU, every one of those keys now looks recently used, so the hot keys get pushed out. The common belief is that this destroys an LRU cache. The lesson measured it. Right after a scan, LRU's hit rate fell from its usual 53 percent to 42, and was back to normal within about four hundred requests. LFU showed no dip. The effect is real, but small. The simple fix is to keep batch jobs out of the shared cache.
The lesson's choosing rule starts with one number. Divide your cache size by your number of distinct keys. If the cache is large compared with the key space, the policy barely matters, so take the default.