介绍

LRU 就是 Least Recently Used 的缩写,翻译过来就是“最近最少使用”。也就是说 LRU 算法会将最近最少用的缓存移除,让给最新使用的缓存。而往往最常读取的,也就是读取次数最多的,所以利用好 LRU 算法,我们能够提供对热点数据的缓存效率,能够提高缓存服务的内存使用率。

代码实现

  1. public class LRUCache<K, V> extends LinkedHashMap<K, V> {
  2. private int capacity;
  3. /**
  4. * 传递进来最多能缓存多少数据
  5. *
  6. * @param capacity 缓存大小
  7. */
  8. public LRUCache(int capacity) {
  9. super(capacity, 0.75f, true);
  10. this.capacity = capacity;
  11. }
  12. /**
  13. * 如果map中的数据量大于设定的最大容量,返回true,再新加入对象时删除最老的数据
  14. *
  15. * @param eldest 最老的数据项
  16. * @return true则移除最老的数据
  17. */
  18. @Override
  19. protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
  20. // 当 map中的数据量大于指定的缓存个数的时候,自动移除最老的数据
  21. return size() > capacity;
  22. }
  23. }

参考链接

https://doocs.gitee.io/advanced-java/#/./docs/high-concurrency/redis-expiration-policies-and-lru