一、Ehcache淘汰机制
下面是Ehcache淘汰机制时序图:
Ehcache缓存淘汰时,主要做了下面几件事情:
- put操作结束后,判断是否超出了最大容量
- 从SelectableConcurrentHashMap中随机取出不超过30个元素作为淘汰样本
- 根据淘汰策略选出样本中需要被淘汰的元素
- 从SelectableConcurrentHashMap中移除该元素
可以看出,Ehcache缓存淘汰机制存在下面几个问题:
- 缓存淘汰不是基于全局的,而是基于样本的
- 缓存淘汰是在插入之后才进行的,所以在淘汰机制执行之前,缓存中的元素时超过限制的
二、Ehcache淘汰策略
Ehcache提供了3中缓存失效策略:
- LRU:最近最少未使用。默认策略
- LFU:最少被使用
- FIFO:先进先出
下面是缓存策略的类图: