Недавно мне вместо одного простенького кэша в виде хешмапы потребовалось использовать LRU кэш. Т.е. я хотел, чтобы при достижении кэшом какого-то размера, из него начинали выкидываться старые значения, которые давно не использовались. Каково же было мое удивление, что для этого во всем приложении пришлось добавить всего три строчки и не потребовалось подключения какой-либо библиотеки. Но это прокатило только для самого простейшего случая. Если вы хотите использовать LRU кэш, за доступ к которому будет нехилая конкуренция со стороны нескольких потоков, то для того, чтобы это работало эффективно, придется напрячься побольше. Но, давайте, обо всем по порядку.