• 我们究竟什么时候可以使用Ehcache缓存


    一、Ehcache是什么

    EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。

    二、Ehcache的使用场景是什么

    1、首先最主要就是页面缓存。
    网站页面的数据来源非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给页面做缓存是一个不错的主意。

    2、常用数据的缓存
    一些配置信息,如后台的某些不经常改变的设置都可以缓存起来。

    三、Ehcache使用的注意点

    1、比较少的更新数据表的情况
    2、对并发要求不是很严格的情况
    多台应用服务器中的缓存是不能进行实时同步的。
    3、对一致性要求不高的情况下
    因为Ehcache本地缓存的特性,目前无法很好的解决不同服务器间缓存同步的问题,所以我们在一致性要求非常高的场合下,尽量使用Redis、Memcached等集中式缓存。

    四、Ehcache在集群、分布式的情况下表现如何

    在分布式情况下有二种同步方式:
    1、RMI组播方式


    Paste_Image.png


    示例:

    <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=automatic, multicastGroupAddress=localhost,
            multicastGroupPort=4446,timeToLive=255"/>

    原理:当缓存改变时,ehcache会向组播IP地址和端口号发送RMI UDP组播包。
    缺陷:Ehcache的组播做得比较初级,功能只是基本实现(比如简单的一个HUB,接两台单网卡的服务器,互相之间组播同步就没问题),对一些复杂的环境(比如多台服务器,每台服务器上多地址,尤其是集群,存在一个集群地址带多个物理机,每台物理机又带多个虚拟站的子地址),就容易出现问题。

    2、P2P方式
    原理:P2P要求每个节点的Ehcache都要指向其他的N-1个节点。

    3、JMS消息模式


    Paste_Image.png


    原理:这种模式的核心就是一个消息队列,每个应用节点都订阅预先定义好的主题,同时,节点有元素更新时,也会发布更新元素到主题中去。各个应用服务器节点通过侦听MQ获取到最新的数据,然后分别更新自己的Ehcache缓存,Ehcache默认支持ActiveMQ,我们也可以通过自定义组件的方式实现类似Kafka,RabbitMQ。

    4、Cache Server模式
    原理:这种模式会存在主从节点。


    Paste_Image.png

    缺陷:缓存容易出现数据不一致的问题,

    五、使用Ehcache的瓶颈是什么

    1、缓存漂移(Cache Drift):每个应用节点只管理自己的缓存,在更新某个节点的时候,不会影响到其他的节点,这样数据之间可能就不同步了。

    2、数据库瓶颈(Database Bottlenecks ):对于单实例的应用来说,缓存可以保护数据库的读风暴;但是,在集群的环境下,每一个应用节点都要定期保持数据最新,节点越多,要维持这样的情况对数据库的开销也越大。

    六、实际工作中如何使用Ehcache

    在实际工作中,我更多是将Ehcache作为与Redis配合的二级缓存。
    第一种方式:


    Paste_Image.png


    注:
    这种方式通过应用服务器的Ehcache定时轮询Redis缓存服务器更同步更新本地缓存,缺点是因为每台服务器定时Ehcache的时间不一样,那么不同服务器刷新最新缓存的时间也不一样,会产生数据不一致问题,对一致性要求不高可以使用。

    第二种方式:


    Paste_Image.png


    注:
    通过引入了MQ队列,使每台应用服务器的Ehcache同步侦听MQ消息,这样在一定程度上可以达到准同步更新数据,通过MQ推送或者拉取的方式,但是因为不同服务器之间的网络速度的原因,所以也不能完全达到强一致性。基于此原理使用Zookeeper等分布式协调通知组件也是如此。

    总结:
    1、使用二级缓存的好处是减少缓存数据的网络传输开销,当集中式缓存出现故障的时候,Ehcache等本地缓存依然能够支撑应用程序正常使用,增加了程序的健壮性。另外使用二级缓存策略可以在一定程度上阻止缓存穿透问题。

    2、根据CAP原理我们可以知道,如果要使用强一致性缓存(根据自身业务决定),集中式缓存是最佳选择,如(Redis,Memcached等)。



    文/小程故事多(简书作者)
    原文链接:http://www.jianshu.com/p/2cd6ad416a5a#
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素
    深入解析_Android的自定义布局
    RSA算法加密解密
    android版本
    TabHost+RadioGroup搭建基础布局
    android横竖屏控制
    一大波静态方法
    有时候
    简单的dialog菜单
    mongodb学习(三)——函数使用的小技巧
  • 原文地址:https://www.cnblogs.com/duanxz/p/4701822.html
Copyright © 2020-2023  润新知