EhCache

摘录自:
https://cloud.tencent.com/developer/article/1919556
https://blog.csdn.net/qq_37391229/article/details/118522247
https://www.jianshu.com/p/5a0669d6305e (优)

  1. 简介
    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也提供有缓存共享的方案,但对分布式集群的支持不太好,缓存共享实现麻烦。

  2. EhCache与Redis

    EhCache直接在JVM中进行缓存,速度快,效率高。与Redis相比,操作简单、易用、高效。EhCache对分布式集群的支持不太好,缓存共享实现麻烦。

    Redis是通过Socket访问到缓存服务,效率比EhCache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。

    所以,如果是单体应用,或对缓存访问要求很高,可考虑采用EhCache;如果是大型系统,存在缓存共享、分布式部署、缓存内容很大时,则建议采用Redis。

  3. 总结

    Ehcache是java内存结构的缓存,内部结构为java ConcurrentHashMap的重写,ehcache3内部结构为ConcurrentHashMap+WeekRefererce

    作者认为使用ehcache适合两种业务

    1、访问次数多qps特别多,类似web放刷策略

    2、需要缓存数据量小

    缺点:

    如果不使用ehcache集群,在项目集群部署的情况下,敏感数据的更新可能不及时。

    1、敏感数据不使用ehcache

    2、如果使用建议ehcache的过期时间设置的非常小1-10秒

posted on 2023-07-25 17:31  buye  阅读(20)  评论(0)    收藏  举报