搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Java资料站 > 初步认识Ehcache清空缓存的3种策略

初步认识Ehcache清空缓存的3种策略

Java资料站 2020-10-17

优质文章,第一时间送达

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 
在一些项目中可能会用到这个缓存框架,这是我们就需要进行spring和ehcache的整合,在整合过程中通常需要在ehcahe.xml中进行如下配置

在配置文件中参数”memoryStoreEvictionPolicy”指定了缓存的清空策略,当maxElementsInMemory达到限制时会根据指定的策略进行清空缓存。 
缓存的清空策略一共有三种: 
LRU(Least Recently Used):最近最少使用 
LFU(Leats Frequently Uesd):最不经常使用 
FIFO(First in First Out):先进先出 
下面将会对这三种算法做详细的说明:

LRU(最近最少使用) 
lru:根据数据的历史访问记录进行淘汰数据,它的基本思想是”如果数据最近被访问的次数多,那么在将来被访问的几率也会大一些。”我们只需要在每次调换时,找到最近最久使用的那个页面调出内存。这就是LRU算法的全部内容。 
LRU算法的淘汰过程如下: 
假设序列:4 3 4 2 3 1 4 2
假设物理块有3个 
初步认识Ehcache清空缓存的3种策略
LRU一般采用链表的方式实现,便于快速移动数据的位置,一开始缓存池是空的,往缓存池中插入数据的时候不用担心容量不足的问题,在第四步的时候缓存池已经满了(在实际应用的时候不会让到达缓存的尺寸的,一般70%左右就开始考虑淘汰机制了),在第五步的时候从缓存池访问数据“3”,数据“3”被访问从时间点上来看是最近被访问的,将3移动到链表的顶端。在第六步的时候,数据“1”进入缓存池发现缓存池已满,按照LRU淘汰算法的原则把数据“4”淘汰,将数据“1”插入缓存池中。 
LRU算法的缺陷就是仅从时间上来考虑有可能会淘汰仍然有价值的单元。

LFU(最不经常使用) 
LFU:根据数据的历史访问频率来淘汰数据,它的核心思想就是“如果数据过去被访问多次,那么未来被访问的频率也更高”。 
实现:LFU每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同的计数的数据块按照时间来排序。 
LFU算法的淘汰过程如下: 
初步认识Ehcache清空缓存的3种策略
图中红色字体为每个数据被访问的次数,被访问的次数多的放在顶部(如果数据被访问的次数相同,则按照时间进行排序,最近被访问的排在上面)。 
在第三步的时候3和4被访问的次数都为“1”,当访问次数相同时按照时间进行排序,在第六步的时候,数据“1”进入但是此时缓存池已满(此时数据“2”被访问次数最好)按照LFU算法淘汰原则数据“2”被淘汰。

FIFO(先进先出) 
FIFO:根据数据块进入缓存池的顺序进行淘汰,它的基本思想就是“先进入缓存池的数据先被淘汰”,符合队列的特性,数据结构上使用队列(Queue)来实现。 
FIFO算法淘汰过程如下: 
初步认识Ehcache清空缓存的3种策略
在第四步数据“2”进入后此时缓存池已满,当进行到第五步时3进入并没有淘汰任何数据,因为此时缓存池已经存在数据“3”所以对缓存池中的“3”进行调用,当进行到第六步“1”进入的时候,由于此时的缓存池已满并且缓存池中还不存在数据“1”,所以要进行淘汰,根据“先进先出”的原则淘汰的是数据“4”。

以上就是我对ehcahe清空缓存的3种策略的初步理解,如有不对欢迎指正。 



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:

https://blog.csdn.net/weixin_39477597/article/details/78038064






粉丝福利:Java从入门到入土学习路线图

👇👇👇

 
   
   
 
👆长按上方微信二维码 2 秒



感谢点赞支持下哈 

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《初步认识Ehcache清空缓存的3种策略》的版权归原作者「Java资料站」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Java资料站微信公众号

Java资料站微信公众号:ways4321

Java资料站

手机扫描上方二维码即可关注Java资料站微信公众号

Java资料站最新文章

精品公众号随机推荐