我們究竟什么時候可以使用Ehcache緩存
2018-07-20 來源:編程學(xué)習(xí)網(wǎng)

一、Ehcache是什么
EhCache是Hibernate的二級緩存技術(shù)之一,可以把查詢出來的數(shù)據(jù)存儲在內(nèi)存或者磁盤,節(jié)省下次同樣查詢語句再次查詢數(shù)據(jù)庫,大幅減輕數(shù)據(jù)庫壓力。
二、Ehcache的使用場景是什么
1、首先最主要就是頁面緩存。
網(wǎng)站頁面的數(shù)據(jù)來源非常廣泛的,大多數(shù)來自不同的對象,而且有可能來自不同的db,所以給頁面做緩存是一個不錯的主意。
2、常用數(shù)據(jù)的緩存
一些配置信息,如后臺的某些不經(jīng)常改變的設(shè)置都可以緩存起來。
三、Ehcache使用的注意點(diǎn)
1、比較少的更新數(shù)據(jù)表的情況
2、對并發(fā)要求不是很嚴(yán)格的情況
多臺應(yīng)用服務(wù)器中的緩存是不能進(jìn)行實(shí)時同步的。
3、對一致性要求不高的情況下
因為Ehcache本地緩存的特性,目前無法很好的解決不同服務(wù)器間緩存同步的問題,所以我們在一致性要求非常高的場合下,盡量使用Redis、Memcached等集中式緩存。
四、Ehcache在集群、分布式的情況下表現(xiàn)如何
在分布式情況下有二種同步方式:
1、RMI組播方式

示例:
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=localhost,
multicastGroupPort=4446,timeToLive=255"/>
原理:當(dāng)緩存改變時,ehcache會向組播IP地址和端口號發(fā)送RMI UDP組播包。
缺陷:Ehcache的組播做得比較初級,功能只是基本實(shí)現(xiàn)(比如簡單的一個HUB,接兩臺單網(wǎng)卡的服務(wù)器,互相之間組播同步就沒問題),對一些復(fù)雜的環(huán)境(比如多臺服務(wù)器,每臺服務(wù)器上多地址,尤其是集群,存在一個集群地址帶多個物理機(jī),每臺物理機(jī)又帶多個虛擬站的子地址),就容易出現(xiàn)問題。
2、P2P方式
原理:P2P要求每個節(jié)點(diǎn)的Ehcache都要指向其他的N-1個節(jié)點(diǎn)。
3、JMS消息模式

原理:這種模式的核心就是一個消息隊列,每個應(yīng)用節(jié)點(diǎn)都訂閱預(yù)先定義好的主題,同時,節(jié)點(diǎn)有元素更新時,也會發(fā)布更新元素到主題中去。各個應(yīng)用服務(wù)器節(jié)點(diǎn)通過偵聽MQ獲取到最新的數(shù)據(jù),然后分別更新自己的Ehcache緩存,Ehcache默認(rèn)支持ActiveMQ,我們也可以通過自定義組件的方式實(shí)現(xiàn)類似Kafka,RabbitMQ。
4、Cache Server模式
原理:這種模式會存在主從節(jié)點(diǎn)。

缺陷:緩存容易出現(xiàn)數(shù)據(jù)不一致的問題,
五、使用Ehcache的瓶頸是什么
1、緩存漂移(Cache Drift):每個應(yīng)用節(jié)點(diǎn)只管理自己的緩存,在更新某個節(jié)點(diǎn)的時候,不會影響到其他的節(jié)點(diǎn),這樣數(shù)據(jù)之間可能就不同步了。
2、數(shù)據(jù)庫瓶頸(Database Bottlenecks ):對于單實(shí)例的應(yīng)用來說,緩存可以保護(hù)數(shù)據(jù)庫的讀風(fēng)暴;但是,在集群的環(huán)境下,每一個應(yīng)用節(jié)點(diǎn)都要定期保持?jǐn)?shù)據(jù)最新,節(jié)點(diǎn)越多,要維持這樣的情況對數(shù)據(jù)庫的開銷也越大。
六、實(shí)際工作中如何使用Ehcache
在實(shí)際工作中,我更多是將Ehcache作為與Redis配合的二級緩存。
第一種方式:

注:
這種方式通過應(yīng)用服務(wù)器的Ehcache定時輪詢Redis緩存服務(wù)器更同步更新本地緩存,缺點(diǎn)是因為每臺服務(wù)器定時Ehcache的時間不一樣,那么不同服務(wù)器刷新最新緩存的時間也不一樣,會產(chǎn)生數(shù)據(jù)不一致問題,對一致性要求不高可以使用。
第二種方式:

注:
通過引入了MQ隊列,使每臺應(yīng)用服務(wù)器的Ehcache同步偵聽MQ消息,這樣在一定程度上可以達(dá)到準(zhǔn)同步更新數(shù)據(jù),通過MQ推送或者拉取的方式,但是因為不同服務(wù)器之間的網(wǎng)絡(luò)速度的原因,所以也不能完全達(dá)到強(qiáng)一致性。基于此原理使用Zookeeper等分布式協(xié)調(diào)通知組件也是如此。
總結(jié):
1、使用二級緩存的好處是減少緩存數(shù)據(jù)的網(wǎng)絡(luò)傳輸開銷,當(dāng)集中式緩存出現(xiàn)故障的時候,Ehcache等本地緩存依然能夠支撐應(yīng)用程序正常使用,增加了程序的健壯性。另外使用二級緩存策略可以在一定程度上阻止緩存穿透問題。
2、根據(jù)CAP原理我們可以知道,如果要使用強(qiáng)一致性緩存(根據(jù)自身業(yè)務(wù)決定),集中式緩存是最佳選擇,如(Redis,Memcached等)。
原文鏈接:http://www.jianshu.com/p/2cd6ad416a5a
標(biāo)簽: idc 服務(wù)器 數(shù)據(jù)庫 網(wǎng)絡(luò) 應(yīng)用服務(wù)器
版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。
上一篇:什么是軟件