我们究竟什么时候可以使用Ehcache缓存
2016-11-03 20:24
316 查看
我们究竟什么时候可以使用Ehcache缓存
一、Ehcache是什么
EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。
二、Ehcache的使用场景是什么
1、首先最主要就是页面缓存。
网站页面的数据来源非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给页面做缓存是一个不错的主意。
2、常用数据的缓存
一些配置信息,如后台的某些不经常改变的设置都可以缓存起来。
三、Ehcache使用的注意点
1、比较少的更新数据表的情况
2、对并发要求不是很严格的情况
多台应用服务器中的缓存是不能进行实时同步的。
3、对一致性要求不高的情况下
因为Ehcache本地缓存的特性,目前无法很好的解决不同服务器间缓存同步的问题,所以我们在一致性要求非常高的场合下,尽量使用Redis、Memcached等集中式缓存。
四、Ehcache在集群、分布式的情况下表现如何
在分布式情况下有二种同步方式:
1、RMI组播方式
示例:
原理:当缓存改变时,ehcache会向组播IP地址和端口号发送RMI UDP组播包。
缺陷:Ehcache的组播做得比较初级,功能只是基本实现(比如简单的一个HUB,接两台单网卡的服务器,互相之间组播同步就没问题),对一些复杂的环境(比如多台服务器,每台服务器上多地址,尤其是集群,存在一个集群地址带多个物理机,每台物理机又带多个虚拟站的子地址),就容易出现问题。
2、P2P方式
原理:P2P要求每个节点的Ehcache都要指向其他的N-1个节点。
3、JMS消息模式
原理:这种模式的核心就是一个消息队列,每个应用节点都订阅预先定义好的主题,同时,节点有元素更新时,也会发布更新元素到主题中去。各个应用服务器节点通过侦听MQ获取到最新的数据,然后分别更新自己的Ehcache缓存,Ehcache默认支持ActiveMQ,我们也可以通过自定义组件的方式实现类似Kafka,RabbitMQ。
4、Cache Server模式
原理:这种模式会存在主从节点。
缺陷:缓存容易出现数据不一致的问题,
五、使用Ehcache的瓶颈是什么
1、缓存漂移(Cache Drift):每个应用节点只管理自己的缓存,在更新某个节点的时候,不会影响到其他的节点,这样数据之间可能就不同步了。
2、数据库瓶颈(Database Bottlenecks ):对于单实例的应用来说,缓存可以保护数据库的读风暴;但是,在集群的环境下,每一个应用节点都要定期保持数据最新,节点越多,要维持这样的情况对数据库的开销也越大。
六、实际工作中如何使用Ehcache
在实际工作中,我更多是将Ehcache作为与Redis配合的二级缓存。
第一种方式:
注:
这种方式通过应用服务器的Ehcache定时轮询Redis缓存服务器更同步更新本地缓存,缺点是因为每台服务器定时Ehcache的时间不一样,那么不同服务器刷新最新缓存的时间也不一样,会产生数据不一致问题,对一致性要求不高可以使用。
第二种方式:
注:
通过引入了MQ队列,使每台应用服务器的Ehcache同步侦听MQ消息,这样在一定程度上可以达到准同步更新数据,通过MQ推送或者拉取的方式,但是因为不同服务器之间的网络速度的原因,所以也不能完全达到强一致性。基于此原理使用Zookeeper等分布式协调通知组件也是如此。
总结:
1、使用二级缓存的好处是减少缓存数据的网络传输开销,当集中式缓存出现故障的时候,Ehcache等本地缓存依然能够支撑应用程序正常使用,增加了程序的健壮性。另外使用二级缓存策略可以在一定程度上阻止缓存穿透问题。
2、根据CAP原理我们可以知道,如果要使用强一致性缓存(根据自身业务决定),集中式缓存是最佳选择,如(Redis,Memcached等)。
文/小程故事多(简书作者)
原文链接:http://www.jianshu.com/p/2cd6ad416a5a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
我们究竟什么时候可以使用Ehcache缓存
注意:
使用二级缓存后,查出的对象
缓存在内存中。如果对象中的属性有所变化,那么后面每次访问的对象都是变化后的对象。
(注意对象中的 属性值,是否与前端、或者其他业务有关,是否是辅助字段,因为属性一次变化,终身变化。)
一、Ehcache是什么
EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。
二、Ehcache的使用场景是什么
1、首先最主要就是页面缓存。
网站页面的数据来源非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给页面做缓存是一个不错的主意。
2、常用数据的缓存
一些配置信息,如后台的某些不经常改变的设置都可以缓存起来。
三、Ehcache使用的注意点
1、比较少的更新数据表的情况
2、对并发要求不是很严格的情况
多台应用服务器中的缓存是不能进行实时同步的。
3、对一致性要求不高的情况下
因为Ehcache本地缓存的特性,目前无法很好的解决不同服务器间缓存同步的问题,所以我们在一致性要求非常高的场合下,尽量使用Redis、Memcached等集中式缓存。
四、Ehcache在集群、分布式的情况下表现如何
在分布式情况下有二种同步方式:
1、RMI组播方式
示例:
<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消息模式
原理:这种模式的核心就是一个消息队列,每个应用节点都订阅预先定义好的主题,同时,节点有元素更新时,也会发布更新元素到主题中去。各个应用服务器节点通过侦听MQ获取到最新的数据,然后分别更新自己的Ehcache缓存,Ehcache默认支持ActiveMQ,我们也可以通过自定义组件的方式实现类似Kafka,RabbitMQ。
4、Cache Server模式
原理:这种模式会存在主从节点。
缺陷:缓存容易出现数据不一致的问题,
五、使用Ehcache的瓶颈是什么
1、缓存漂移(Cache Drift):每个应用节点只管理自己的缓存,在更新某个节点的时候,不会影响到其他的节点,这样数据之间可能就不同步了。
2、数据库瓶颈(Database Bottlenecks ):对于单实例的应用来说,缓存可以保护数据库的读风暴;但是,在集群的环境下,每一个应用节点都要定期保持数据最新,节点越多,要维持这样的情况对数据库的开销也越大。
六、实际工作中如何使用Ehcache
在实际工作中,我更多是将Ehcache作为与Redis配合的二级缓存。
第一种方式:
注:
这种方式通过应用服务器的Ehcache定时轮询Redis缓存服务器更同步更新本地缓存,缺点是因为每台服务器定时Ehcache的时间不一样,那么不同服务器刷新最新缓存的时间也不一样,会产生数据不一致问题,对一致性要求不高可以使用。
第二种方式:
注:
通过引入了MQ队列,使每台应用服务器的Ehcache同步侦听MQ消息,这样在一定程度上可以达到准同步更新数据,通过MQ推送或者拉取的方式,但是因为不同服务器之间的网络速度的原因,所以也不能完全达到强一致性。基于此原理使用Zookeeper等分布式协调通知组件也是如此。
总结:
1、使用二级缓存的好处是减少缓存数据的网络传输开销,当集中式缓存出现故障的时候,Ehcache等本地缓存依然能够支撑应用程序正常使用,增加了程序的健壮性。另外使用二级缓存策略可以在一定程度上阻止缓存穿透问题。
2、根据CAP原理我们可以知道,如果要使用强一致性缓存(根据自身业务决定),集中式缓存是最佳选择,如(Redis,Memcached等)。
文/小程故事多(简书作者)
原文链接:http://www.jianshu.com/p/2cd6ad416a5a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
我们究竟什么时候可以使用Ehcache缓存
注意:
使用二级缓存后,查出的对象
缓存在内存中。如果对象中的属性有所变化,那么后面每次访问的对象都是变化后的对象。
(注意对象中的 属性值,是否与前端、或者其他业务有关,是否是辅助字段,因为属性一次变化,终身变化。)
相关文章推荐
- 我们究竟什么时候可以使用Ehcache缓存
- 我们究竟什么时候可以使用Ehcache缓存
- 我们究竟什么时候可以使用Ehcache缓存(转)
- 我们究竟什么时候可以使用Ehcache缓存
- 缓存技术之Ehcache(2)究竟什么时候可以使用Ehcache缓存
- 什么时候可以使用Ehcache缓存
- 为什么很多时候我们在传输数据的时候都使用base64编码,因为这样我们可以减少数据量的传输。
- 什么是shell 是不是什么时候都可以使用shell
- Google论坛什么时候又可以使用的
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- 许多人都相信缘分,尤其是在爱情方面。事实上,茫茫人海,可以遇到一个跟自己毫无血缘关系的人,继而相知、相爱,最终结合在一起,这种缘分真的很奇妙。也许正因为此,爱情在我们的生命中才显得如此重要,而且永远是一个亘古不变的话题。但当两个人的缘分尽了,究竟又有几个可
- 尊敬的用户:您访问的域名有误或网页不存在,您可以使用我们提供的以下服务
- 听说此文又是一篇找砖头的文章, 善良,可爱型的人请速速离开。 1: 模板引擎。 模板引擎是否得继续使用及发挥作用, 成为phper们在争论的第一话题。 其实我们可以换个立场来思考, 如果d
- Xcode 项目中我们可以使用 ARC 和非 ARC 的混合模式。
- 图片拉伸通常我们开发中将其写到UIImage的分类中使用,下面可以直接复制使用
- 尊敬的用户:您访问的域名有误或网页不存在,您可以使用我们提供的一下服务
- System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。 其函数原型是: public static void arraycopy(Object src, int
- 什么是shell 是不是什么时候都可以使用shell
- 使用vc2010的c++0x特性,我们可以写出简洁有趣的代码
- XenServer没有自己的文件系统,也就没有自己的ISO Libery,给我们创建虚拟机带来了不少困扰,使用正文这个方法可以不用先安装FileServer