EhCache
摘录自:
https://cloud.tencent.com/developer/article/1919556
https://blog.csdn.net/qq_37391229/article/details/118522247
https://www.jianshu.com/p/5a0669d6305e (优)
-
简介
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。
(注意的这里的关键字进程,基于进程的缓存直觉告诉我们效率肯定要高一些,因为它直接在进程之内进行操作,但不同应用之间缓存的共享可能就会有问题。)EhCache支持单机缓存和分布式缓存,分布式可以理解为缓存数据的共享,这就导致内存缓存数据量偏小。EhCache缓存存储和读取非常快。
EhCache是Hibernate中默认的CacheProvider。
Spring Boot也对其进行了支持,Spring中提供的缓存抽象也支持对EhCache缓存框架的绑定,而且支持基于注解的方式来使用。EhCache提供了多种缓存策略,主要分为内存和磁盘两级,是一款面向通用缓存、Java EE和轻量级容器的缓存框架。
主要优点有:
快速,简单
多种缓存策略 堆缓存、磁盘缓存、集群缓存
缓存数据有两级:,因此无需担心容量问题
缓存数据会在虚拟机重启的过程中写入磁盘
可以通过RMI、可插入API等方式进行分布式缓存
具有缓存和缓存管理器的侦听接口
支持多缓存管理器实例,以及一个实例的多个缓存区域
提供Hibernate的缓存实现缺点:
非常占用磁盘空间,这是因为DiskCache的算法简单,只是对元素直接追加存储。这样虽然可以提高效率,但在使用频繁的系统中,磁盘很快会满。
另外就是不能保证数据安全,当然突然kill掉Java进程时,可能会产生冲突。
EhCache解决冲突的方法是重建Cache,这对Cache数据需要保持时可能会产生影响。Cache只是简单的加速,不能保证数据的安全。虽然EhCache也提供有缓存共享的方案,但对分布式集群的支持不太好,缓存共享实现麻烦。
-
EhCache与Redis
EhCache直接在JVM中进行缓存,速度快,效率高。与Redis相比,操作简单、易用、高效。EhCache对分布式集群的支持不太好,缓存共享实现麻烦。
Redis是通过Socket访问到缓存服务,效率比EhCache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
所以,如果是单体应用,或对缓存访问要求很高,可考虑采用EhCache;如果是大型系统,存在缓存共享、分布式部署、缓存内容很大时,则建议采用Redis。
-
总结
Ehcache是java内存结构的缓存,内部结构为java ConcurrentHashMap的重写,ehcache3内部结构为ConcurrentHashMap+WeekRefererce
作者认为使用ehcache适合两种业务
1、访问次数多qps特别多,类似web放刷策略
2、需要缓存数据量小
缺点:
如果不使用ehcache集群,在项目集群部署的情况下,敏感数据的更新可能不及时。
1、敏感数据不使用ehcache
2、如果使用建议ehcache的过期时间设置的非常小1-10秒
浙公网安备 33010602011771号