1 // Package lru provides three different LRU caches of varying sophistication. 2 // 3 // Cache is a simple LRU cache. It is based on the 4 // LRU implementation in groupcache: 5 // https://github.com/golang/groupcache/tree/master/lru 6 // 7 // TwoQueueCache tracks frequently used and recently used entries separately. 8 // This avoids a burst of accesses from taking out frequently used entries, 9 // at the cost of about 2x computational overhead and some extra bookkeeping. 10 // 11 // ARCCache is an adaptive replacement cache. It tracks recent evictions as 12 // well as recent usage in both the frequent and recent caches. Its 13 // computational overhead is comparable to TwoQueueCache, but the memory 14 // overhead is linear with the size of the cache. 15 // 16 // ARC has been patented by IBM, so do not use it if that is problematic for 17 // your program. 18 // 19 // All caches in this package take locks while operating, and are therefore 20 // thread-safe for consumers. 21 package lru 22