缓存分类及简单介绍

缓存

1、本地缓存分类

1Caffeine
2Google Guava
3EhCache
4OHC

2、分布式缓存

一、本地缓存

1、Caffeine

Spring官方的,springboot2.0默认集成的。默认使用的是W-T-LFU回收策略

2、Google Guava

Guave Cache 缓存介绍:跳转

过期策略

1、基于过期时间的删除

基于过期时间的删除分为两种:
写多长时间后删除(在过期时间内访问,不更新过期时间),
读多长时间后删除(访问后刷新过期时间)

2、基于数据大小删除
当超过最大容量时,移除算法:LRU+FIFO算法,在访问次数一样的情况下FIFO淘汰数据。
原理:每次访问就把这个元素放到队列的头部,队列满了就淘汰队列尾部的数据
缺点:偶发性的数据访问,通过LRU可能就将真正的热点数据挤出缓存

关于Guava淘汰算法-LRU
介绍

关于LFU算法

LFU为缓存中的每个数据项都维护了一个计数器,会统计每个缓存项的访问次数,当缓存使用量达到一定程度的时候,
会优先淘汰那些访问次数比较小的数据项。

LFU是基于这种思想进行设计:【一定时期内】被访问【次数最少】的页,在将来被访问到的几率也是最小的。
相比于LRULeast Recently Use)算法,LFU更加注重于使用的频率。

LFU将数据和数据的访问频次保存在一个容量有限的容器中,当访问一个数据时:

该数据在容器中,则将该数据的访问频次加1。
该数据不在容器中,则将该数据加入到容器中,且访问频次为1。

当数据量达到容器的限制后,会剔除掉访问频次最低的数据。下图是一个简易的LFU算法示意图。

在这里插入图片描述

W-TinyLFU window-tiny

这个淘汰算法其实就是结合LRULFU算法的优缺点的一个缓存淘汰算法,
说白了就是要保留LRULFU的这些优点(淘汰策略要结合最近访问时间和访问次数),并规避掉上述各自的问题。

FIFO只是参考了进入队列时间、LRU只是参考了最近访问时间、LFU只是参考了访问次数。所以都会有些问题。
W-TinyLFU 结合了LRULFU的优点。

关于【WTLFU】淘汰算法添加链接描述

关于4种淘汰策略的对比:跳转

3、EhCache

这个也是非常优秀的进程内缓存框架,Hibernate默认的集成工具。
关于EhCache的介绍 跳转

EhCache总结

EhCache3.0中不但提供了【堆内存储方式】,还提供了【堆外存储】以及【磁盘存储】三种存储方式。
注意堆外内存的数据,不受GC的影响。可以通过cacheManager对象,设置存储方式(堆内、堆外、磁盘),
以及每个存储空间所对应的大小。

回收策略:
1、可以指定过期时间
2Ehcache还支持多个缓存策略,包括FIFOLRULFU等,可以根据具体场景选择最适合的缓存策略。

除此之外,Ehcache还提供了分布式缓存功能,支持多个缓存节点之间的数据同步和共享。
缺点:容易造成缓存击穿、缓存穿透等问题,

EhCache回收策略汇总跳转

4、OHC

OHC:存放在堆外内存里面。使用缓存框架OHC操作堆外内存,优化内存使用,减少GC

相对于持久化数据库,可用的内存空间更少、速度也更快,因此通常将访问频繁的数据放入堆外内存进行缓存,
并保证缓存的时效性。OHC主要具有以下特性来满足需求:

1、数据存储在堆外,不影响GC
2、支持为每个缓存项设置过期时间
3、支持配置LRUW-TinyLFU逐出策略
4、能够维护大量的缓存条目(百万量级以上)
5、支持异步加载缓存
6、读写速度在微秒级别

OHC使用案例,以及原理分析 :跳转

4、对比

Guava CacheCaffeine的对比:
通过对guava cache 和caffeine 从性能到算法及使用的对比中,可以发现Caffeine基本是在Guava的基础上进行优化
而来的,提供的功能基本一致,但是通过对算法和部分逻辑的优化,完成了对性能极大的提升,而且我们可以发现,两者
切换几乎没有成本,毕竟caffeine就是以替换guava cache为目的而来的。

在这里插入图片描述

在这里插入图片描述

二、分布式缓存

1、redis
2、Elasticsearch:基于Lucene的缓存

三、缓存最多的问题

1、缓存穿透-恶意
2、缓存击穿-某一个热点数据过期,大量请求走到数据库。  (GuavaCache实现了)
3、缓存雪崩-大量的数据同时失效或过期

四、缓存淘汰算法

在这里插入图片描述
缓存淘汰算法《跳转》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值