我們究竟什麼時候可以使用Ehcache快取

2021-08-09 22:04:05 字數 2249 閱讀 3528

ehcache是hibernate的二級快取技術之一,可以把查詢出來的資料儲存在記憶體或者磁碟,節省下次同樣查詢語句再次查詢資料庫,大幅減輕資料庫壓力。

1、首先最主要就是頁面快取。 

**頁面的資料**非常廣泛的,大多數來自不同的物件,而且有可能來自不同的db,所以給頁面做快取是乙個不錯的主意。 

2、常用資料的快取 

一些配置資訊,如後台的某些不經常改變的設定都可以快取起來。

1、比較少的更新資料表的情況 

2、對併發要求不是很嚴格的情況 

多台應用伺服器中的快取是不能進行實時同步的。 

3、對一致性要求不高的情況下 

因為ehcache本地快取的特性,目前無法很好的解決不同伺服器間快取同步的問題,所以我們在一致性要求非常高的場合下,盡量使用redis、memcached等集中式快取。

在分布式情況下有二種同步方式: 

1、rmi組播方式

示例:

class="net.sf.ehcache.distribution.rmicachemanagerpeerprovide***ctory"

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模式 

原理:這種模式會存在主從節點。 

缺陷:快取容易出現資料不一致的問題,

1、快取漂移(cache drift):每個應用節點只管理自己的快取,在更新某個節點的時候,不會影響到其他的節點,這樣資料之間可能就不同步了。 

2、資料庫瓶頸(database bottlenecks ):對於單例項的應用來說,快取可以保護資料庫的讀風暴;但是,在集群的環境下,每乙個應用節點都要定期保持資料最新,節點越多,要維持這樣的情況對資料庫的開銷也越大。

在實際工作中,我更多是將ehcache作為與redis配合的二級快取。 

第一種方式:

注: 這種方式通過應用伺服器的ehcache定時輪詢redis快取伺服器更同步更新本地快取,缺點是因為每台伺服器定時ehcache的時間不一樣,那麼不同伺服器重新整理最新快取的時間也不一樣,會產生資料不一致問題,對一致性要求不高可以使用。 

第二種方式:

注: 通過引入了mq佇列,使每台應用伺服器的ehcache同步偵聽mq訊息,這樣在一定程度上可以達到準同步更新資料,通過mq推送或者拉取的方式,但是因為不同伺服器之間的網路速度的原因,所以也不能完全達到強一致性。基於此原理使用zookeeper等分布式協調通知元件也是如此。 

總結: 

1、使用二級快取的好處是減少快取資料的網路傳輸開銷,當集中式快取出現故障的時候,ehcache等本地快取依然能夠支撐應用程式正常使用,增加了程式的健壯性。另外使用二級快取策略可以在一定程度上阻止快取穿透問題。 

2、根據cap原理我們可以知道,如果要使用強一致性快取(根據自身業務決定),集中式快取是最佳選擇,如(redis,memcached等)。

什麼時候可以使用極限程式設計?

此篇文章譯文摘自敏捷開發 原文 於don wells 極限程式設計 在以下情況中,使用xp的成功率更高 儘管有一些容納 30個程式設計師的大型專案取得了成功,但在 xp方法中,只適應有 2到 12個程式設計師的專案。您的程式設計師可以很普通,他不需要具有博士學位,但您不能在擁有大量員工的專案上使用 ...

什麼時候我們考慮使用指令碼

指令碼的架構 指令碼宿主 在其中執行 iis,ie,wsh wscript,cscript 指令碼引擎 解釋程式 windows作業系統內建的 vbscript 與jscript 指令碼可以呼叫的物件模型 wsh,wmi,adsi,ado,cdo等 wsh 可以呼叫com物件,使用命令列,呼叫she...

究竟什麼時候該建立索引

索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個位置去搜尋到資料檔案的中間,沒有必要看所有資料。大多數mysql索引 primary key unique ...