常用缓存算法——LRU
LRU算法
Least recently used(LRU)一种常用的缓存算法,通过首先丢弃最近最少使用的记录。LRU算法需要跟踪何时使用了什么,并确保算法始终丢弃最近最少使用的记录。 LRU算法及其实现-以LinkedHashMap为例:
LRU 使用LinkedHashMap
代码实现
1 | package com.github.ordiy.map; |
- 测试代码
1 |
|
- 输出结果
1 | after get-->:key3 |
- 过程解析
使用LinkedHashMap
的记录数据顺序、accessOrder、removeEldestEntry特性实现了一个简单的LRU。在分布式场景下,需要使用类似redis,pika等软件进行实现。
注意 因为LinkedHashMap
并非线程安全的,多线程场景需要使用Collections.synchronizedMap
进行包装
**分布式场景可以用 Redis 等组件实现 **
总结
LRU缓存有其局限性,在类似于双11这样的场景,流量/活跃用户突然大增时会出现缓存击穿问题。
参考:
https://juejin.im/post/5a4b433b6fb9a0451705916f LinkedHashMap 源码详细分 oracle doc LinkedHashMap Java集合类 LinkedHashMap
- Title: 常用缓存算法——LRU
- Author: Ordiy
- Created at : 2017-01-01 00:00:00
- Updated at : 2025-03-27 12:22:14
- Link: https://ordiy.github.io/posts/2018-01-01-LRU-algorithms/
- License: This work is licensed under CC BY 4.0.