EhCache 璇﹁В (杞

EhCache 璇﹁В (杞?

Ehcache 鏄幇鍦ㄦ渶娴佽鐨勭函Java寮€婧愮紦瀛樻鏋讹紝閰嶇疆绠€鍗曘€佺粨鏋勬竻鏅般€佸姛鑳藉己澶э紝鏈€鍒濈煡閬撳畠锛屾槸浠嶩ibernate鐨勭紦瀛樺紑濮嬬殑銆傜綉涓婁腑鏂囩殑EhCache鏉愭枡 浠ョ畝鍗曚粙缁嶅拰閰嶇疆鏂规硶灞呭锛屽鏋滀綘鏈夎繖鏂归潰鐨勯棶棰橈紝璇疯嚜琛実oogle锛涘浜嶢PI锛屽畼缃戜笂浠嬬粛宸茬粡闈炲父娓呮锛岃鍙傝瀹樼綉锛涗絾鏄緢灏戣鍒扮壒鎬ц鏄庡拰瀵瑰疄鐜?鍘熺悊鐨勫垎鏋愶紝鍥犳鍦ㄨ繖绡囨枃绔犻噷闈紝鎴戜細璇︾粏浠嬬粛鍜屽垎鏋怑hCache鐨勭壒鎬э紝鍔犱笂涓€浜涜嚜宸辩殑鐞嗚В鍜屾€濊€冿紝甯屾湜瀵圭紦瀛樻劅鍏磋叮鐨勬湅鍙嬫湁鎵€鏀惰幏銆?/p>

涓€銆佺壒鎬т竴瑙?/strong>锛屾潵鑷畼缃戯紝绠€鍗曠炕璇戜竴涓嬶細

1銆佸揩閫熻交閲?/span>
杩囧幓鍑犲勾锛岃澶氭祴璇曡〃鏄嶦hcache鏄渶蹇殑Java缂撳瓨涔嬩竴銆?br> Ehcache鐨勭嚎绋嬫満鍒舵槸涓哄ぇ鍨嬮珮骞跺彂绯荤粺璁捐鐨勩€?br> 澶ч噺鎬ц兘娴嬭瘯鐢ㄤ緥淇濊瘉Ehcache鍦ㄤ笉鍚岀増鏈棿鎬ц兘琛ㄧ幇寰椾竴鑷存€с€?br> 寰堝鐢ㄦ埛閮戒笉鐭ラ亾浠栦滑姝e湪鐢‥hcache锛屽洜涓轰笉闇€瑕佷粈涔堢壒鍒殑閰嶇疆銆?br> API鏄撲簬浣跨敤锛岃繖灏卞緢瀹规槗閮ㄧ讲涓婄嚎鍜岃繍琛屻€?br> 寰堝皬鐨刯ar鍖咃紝Ehcache 2.2.3鎵?68kb銆?br> 鏈€灏忕殑渚濊禆锛氬敮涓€鐨勪緷璧栧氨鏄疭LF4J浜嗐€?br>
2銆佷几缂╂€?/span>
缂撳瓨鍦ㄥ唴瀛樺拰纾佺洏瀛樺偍鍙互浼哥缉鍒版暟G锛孍hcache涓哄ぇ鏁版嵁瀛樺偍鍋氳繃浼樺寲銆?br> 澶у唴瀛樼殑鎯呭喌涓嬶紝鎵€鏈夎繘绋嬪彲浠ユ敮鎸佹暟鐧綠鐨勫悶鍚愩€?br> 涓洪珮骞跺彂鍜屽ぇ鍨嬪CPU鏈嶅姟鍣ㄥ仛浼樺寲銆?br> 绾跨▼瀹夊叏鍜屾€ц兘鎬绘槸涓€瀵圭煕鐩撅紝Ehcache鐨勭嚎绋嬫満鍒惰璁¢噰鐢ㄤ簡Doug Lea鐨勬兂娉曟潵鑾峰緱杈冮珮鐨勬€ц兘銆?br> 鍗曞彴铏氭嫙鏈轰笂鏀寔澶氱紦瀛樼鐞嗗櫒銆?br> 閫氳繃Terracotta鏈嶅姟鍣ㄧ煩闃碉紝鍙互浼哥缉鍒版暟鐧句釜鑺傜偣銆?br>
3銆佺伒娲绘€?/span>
Ehcache 1.2鍏峰瀵硅薄API鎺ュ彛鍜屽彲搴忓垪鍖朅PI鎺ュ彛銆?br> 涓嶈兘搴忓垪鍖栫殑瀵硅薄鍙互浣跨敤闄ょ鐩樺瓨鍌ㄥEhcache鐨勬墍鏈夊姛鑳姐€?br> 闄や簡鍏冪礌鐨勮繑鍥炴柟娉曚互澶栵紝API閮芥槸缁熶竴鐨勩€傚彧鏈夎繖涓や釜鏂规硶涓嶄竴鑷达細getObjectValue鍜実etKeyValue銆傝繖灏变娇寰楃紦瀛樺璞°€佸簭鍒楀寲瀵硅薄鏉ヨ幏鍙栨柊鐨勭壒鎬ц繖涓繃绋嬪緢绠€鍗曘€?br> 鏀寔鍩轰簬Cache鍜屽熀浜嶦lement鐨勮繃鏈熺瓥鐣ワ紝姣忎釜Cache鐨勫瓨娲绘椂闂撮兘鏄彲浠ヨ缃拰鎺у埗鐨勩€?br> 鎻愪緵浜哃RU銆丩FU鍜孎IFO缂撳瓨娣樻卑绠楁硶锛孍hcache 1.2寮曞叆浜嗘渶灏戜娇鐢ㄥ拰鍏堣繘鍏堝嚭缂撳瓨娣樻卑绠楁硶锛屾瀯鎴愪簡瀹屾暣鐨勭紦瀛樻窐姹扮畻娉曘€?br> 鎻愪緵鍐呭瓨鍜岀鐩樺瓨鍌紝Ehcache鍜屽ぇ澶氭暟缂撳瓨瑙e喅鏂规涓€鏍凤紝鎻愪緵楂樻€ц兘鐨勫唴瀛樺拰纾佺洏瀛樺偍銆?br> 鍔ㄦ€併€佽繍琛屾椂缂撳瓨閰嶇疆锛屽瓨娲绘椂闂淬€佺┖闂叉椂闂淬€佸唴瀛樺拰纾佺洏瀛樻斁缂撳瓨鐨勬渶澶ф暟鐩兘鏄彲浠ュ湪杩愯鏃朵慨鏀圭殑銆?br>
4銆佹爣鍑嗘敮鎸?/span>
Ehcache鎻愪緵浜嗗JSR107 JCACHE API鏈€瀹屾暣鐨勫疄鐜般€傚洜涓篔CACHE鍦ㄥ彂甯冧互鍓嶏紝Ehcache鐨勫疄鐜帮紙濡俷et.sf.jsr107cache锛夊凡缁忓彂甯冧簡銆?br> 瀹炵幇JCACHE API鏈夊埄浜庡埌鏈潵鍏朵粬缂撳瓨瑙e喅鏂规鐨勫彲绉绘鎬с€?br> Ehcache鐨勭淮鎶よ€匞reg Luck锛屾鏄疛SR107鐨勪笓瀹跺鍛樹細濮斿憳銆?br>
5銆佸彲鎵╁睍鎬?/span>
鐩戝惉鍣ㄥ彲浠ユ彃浠跺寲銆侲hcache 1.2鎻愪緵浜咰acheManagerEventListener鍜孋acheEventListener鎺ュ彛锛屽疄鐜板彲浠ユ彃浠跺寲锛屽苟涓斿彲浠ュ湪ehcache.xml閲岄厤缃€?br> 鑺傜偣鍙戠幇锛屽啑浣欏櫒鍜岀洃鍚櫒閮藉彲浠ユ彃浠跺寲銆?br> 鍒嗗竷寮忕紦瀛橈紝浠嶦hcache 1.2寮€濮嬪紩鍏ワ紝鍖呭惈浜嗕竴浜涙潈琛$殑閫夐」銆侲hcache鐨勫洟闃熺浉淇℃病鏈変粈涔堟槸涓囪兘鐨勯厤缃€?br> 瀹炵幇鑰呭彲浠ヤ娇鐢ㄥ唴寤虹殑鏈哄埗鎴栬€呭畬鍏ㄨ嚜宸卞疄鐜帮紝鍥犱负鏈夊畬鏁寸殑鎻掍欢寮€鍙戞寚鍗椼€?br> 缂撳瓨鐨勫彲鎵╁睍鎬у彲浠ユ彃浠跺寲銆傚垱寤轰綘鑷繁鐨勭紦瀛樻墿灞曪紝瀹冨彲浠ユ寔鏈変竴涓紦瀛樼殑寮曠敤锛屽苟涓旂粦瀹氬湪缂撳瓨鐨勭敓鍛藉懆鏈熷唴銆?br> 缂撳瓨鍔犺浇鍣ㄥ彲浠ユ彃浠跺寲銆傚垱寤轰綘鑷繁鐨勭紦瀛樺姞杞藉櫒锛屽彲浠ヤ娇鐢ㄤ竴浜涘紓姝ユ柟娉曟潵鍔犺浇鏁版嵁鍒扮紦瀛橀噷闈€?br> 缂撳瓨寮傚父澶勭悊鍣ㄥ彲浠ユ彃浠跺寲銆傚垱寤轰竴涓紓甯稿鐞嗗櫒锛屽湪寮傚父鍙戠敓鐨勬椂鍊欙紝鍙互鎵ц鏌愪簺鐗瑰畾鎿嶄綔銆?br>
6銆佸簲鐢ㄦ寔涔呭寲
鍦╒M閲嶅惎鍚庯紝鎸佷箙鍖栧埌纾佺洏鐨勫瓨鍌ㄥ彲浠ュ鍘熸暟鎹€?br> Ehcache鏄涓€涓紩鍏ョ紦瀛樻暟鎹寔涔呭寲瀛樺偍鐨勫紑婧怞ava缂撳瓨妗嗘灦銆傜紦瀛樼殑鏁版嵁鍙互鍦ㄦ満鍣ㄩ噸鍚悗浠庣鐩樹笂閲嶆柊鑾峰緱銆?br> 鏍规嵁闇€瑕佸皢缂撳瓨鍒峰埌纾佺洏銆傚皢缂撳瓨鏉$洰鍒峰埌纾佺洏鐨勬搷浣滃彲浠ラ€氳繃cache.flush()鏂规硶鏉ユ墽琛岋紝杩欏ぇ澶ф柟渚夸簡Ehcache鐨勪娇鐢ㄣ€?br>
7銆佺洃鍚櫒
缂撳瓨绠$悊鍣ㄧ洃鍚櫒銆傚厑璁告敞鍐屽疄鐜颁簡CacheManagerEventListener鎺ュ彛鐨勭洃鍚櫒锛?br> notifyCacheAdded()
notifyCacheRemoved()
缂撳瓨浜嬩欢鐩戝惉鍣ㄣ€傚厑璁告敞鍐屽疄鐜颁簡CacheEventListener鎺ュ彛鐨勭洃鍚櫒锛屽畠鎻愪緵浜嗚澶氬缂撳瓨浜嬩欢鍙戠敓鍚庣殑澶勭悊鏈哄埗锛?br> notifyElementRemoved/Put/Updated/Expired

8銆佸紑鍚疛MX
Ehcache鐨凧MX鍔熻兘鏄粯璁ゅ紑鍚殑锛屼綘鍙互鐩戞帶鍜岀鐞嗗涓嬬殑MBean锛?br> CacheManager銆丆ache銆丆acheConfiguration銆丆acheStatistics

9銆佸垎甯冨紡缂撳瓨
浠嶦hcache 1.2寮€濮嬶紝鏀寔楂樻€ц兘鐨勫垎甯冨紡缂撳瓨锛屽吋鍏风伒娲绘€у拰鎵╁睍鎬с€?br> 鍒嗗竷寮忕紦瀛樼殑閫夐」鍖呮嫭锛?br> 閫氳繃Terracotta鐨勭紦瀛橀泦缇わ細璁惧畾鍜屼娇鐢═erracotta妯″紡鐨凟hcache缂撳瓨銆傜紦瀛樺彂鐜版槸鑷姩瀹屾垚鐨勶紝骞朵笖鏈夊緢澶氶€夐」鍙互鐢ㄦ潵璋冭瘯缂撳瓨琛屼负鍜屾€ц兘銆?br> 浣跨敤RMI銆丣Groups鎴栬€匤MS鏉ュ啑浣欑紦瀛樻暟鎹細鑺傜偣鍙互閫氳繃澶氭挱鎴栧彂鐜拌€呮墜鍔ㄩ厤缃€傜姸鎬佹洿鏂板彲浠ラ€氳繃RMI杩炴帴鏉ュ紓姝ユ垨鑰呭悓姝ュ畬鎴愩€?br> Custom锛氫竴涓患鍚堢殑鎻掍欢鏈哄埗锛屾敮鎸佸彂鐜板拰澶嶅埗鐨勮兘鍔涖€?br> 鍙敤鐨勭紦瀛樺鍒堕€夐」銆傛敮鎸佺殑閫氳繃RMI銆丣Groups鎴朖MS杩涜鐨勫紓姝ユ垨鍚屾鐨勭紦瀛樺鍒躲€?br> 鍙潬鐨勫垎鍙戯細浣跨敤TCP鐨勫唴寤哄垎鍙戞満鍒躲€?br> 鑺傜偣鍙戠幇锛氳妭鐐瑰彲浠ユ墜鍔ㄩ厤缃垨鑰呬娇鐢ㄥ鎾嚜鍔ㄥ彂鐜帮紝骞朵笖鍙互鑷姩娣诲姞鍜岀Щ闄よ妭鐐广€傚浜庡鎾樆濉炵殑鎯呭喌涓嬶紝鎵嬪姩閰嶇疆鍙互寰堝ソ鍦版帶鍒躲€?br>鍒嗗竷寮忕紦瀛樺彲浠ヤ换鎰忔椂闂村姞鍏ユ垨鑰呯寮€闆嗙兢銆傜紦瀛樺彲浠ラ厤缃湪鍒濆鍖栫殑鏃跺€欐墽琛屽紩瀵肩▼搴忓憳銆?br> BootstrapCacheLoaderFactory鎶借薄宸ュ巶锛屽疄鐜颁簡BootstrapCacheLoader鎺ュ彛锛圧MI瀹炵幇锛夈€?br> 缂撳瓨鏈嶅姟绔€侲hcache鎻愪緵浜嗕竴涓狢ache Server锛屼竴涓獁ar鍖咃紝涓虹粷澶у鏁皐eb瀹瑰櫒鎴栬€呮槸鐙珛鐨勬湇鍔″櫒鎻愪緵鏀寔銆?br> 缂撳瓨鏈嶅姟绔湁涓ょ粍API锛氶潰鍚戣祫婧愮殑RESTful锛岃繕鏈夊氨鏄疭OAP銆傚鎴风娌℃湁瀹炵幇璇█鐨勯檺鍒躲€?br> RESTful缂撳瓨鏈嶅姟鍣細Ehcached鐨勫疄鐜颁弗鏍奸伒寰猂ESTful闈㈠悜璧勬簮鐨勬灦鏋勯鏍笺€?br> SOAP缂撳瓨鏈嶅姟绔細Ehcache RESTFul Web Services API鏆撮湶浜嗗崟渚嬬殑CacheManager锛屼粬鑳藉湪ehcache.xml鎴栬€匢oC瀹瑰櫒閲岄潰閰嶇疆銆?br> 鏍囧噯鏈嶅姟绔寘鍚簡鍐呭祵鐨凣lassfish web瀹瑰櫒銆傚畠琚墦鎴愪簡war鍖咃紝鍙互浠绘剰閮ㄧ讲鍒版敮鎸丼ervlet 2.5鐨剋eb瀹瑰櫒鍐呫€侴lassfish V2/3銆乀omcat 6鍜孞etty 6閮藉凡缁忕粡杩囦簡娴嬭瘯銆?br>
10銆佹悳绱?/span>
鏍囧噯鍒嗗竷寮忔悳绱娇鐢ㄤ簡娴佸紡鏌ヨ鎺ュ彛鐨勬柟寮忥紝璇峰弬闃呮枃妗c€?br>
11銆丣ava EE鍜屽簲鐢ㄧ紦瀛?/span>
涓烘櫘閫氱紦瀛樺満鏅拰妯″紡鎻愪緵楂樿川閲忕殑瀹炵幇銆?br> 闃诲缂撳瓨锛氬畠鐨勬満鍒堕伩鍏嶄簡澶嶅埗杩涚▼骞跺彂鎿嶄綔鐨勯棶棰樸€?br> SelfPopulatingCache鍦ㄧ紦瀛樹竴浜涘紑閿€鏄傝吹鎿嶄綔鏃舵樉寰楃壒鍒湁鐢紝瀹冩槸涓€绉嶉拡瀵硅浼樺寲鐨勭紦瀛樸€傚畠涓嶉渶瑕佽皟鐢ㄨ€呯煡閬撶紦瀛樺厓绱犳€庢牱琚繑鍥烇紝涔熸敮鎸佸湪涓嶉樆濉炶鐨勬儏鍐典笅鍒锋柊缂撳瓨鏉$洰銆?br> CachingFilter锛氫竴涓娊璞°€佸彲鎵╁睍鐨刢ache filter銆?br> SimplePageCachingFilter锛氱敤浜庣紦瀛樺熀浜巖equest URI鍜孮uery String鐨勯〉闈€傚畠鍙互鏍规嵁HTTP request header鐨勫€兼潵閫夋嫨閲囩敤鎴栬€呬笉閲囩敤gzip鍘嬬缉鏂瑰紡灏嗛〉闈㈠彂鍒版祻瑙堝櫒绔€備綘鍙互鐢ㄥ畠鏉ョ紦瀛樻暣涓猄ervlet椤甸潰锛屾棤璁轰綘閲囩敤鐨勬槸JSP銆?velocity锛屾垨鑰呭叾浠栫殑椤甸潰娓叉煋鎶€鏈€?br> SimplePageFragmentCachingFilter锛氱紦瀛橀〉闈㈢墖娈碉紝鍩轰簬request URI鍜孮uery String銆傚湪JSP涓娇鐢╦sp:include鏍囩鍖呭惈銆?br> 宸茬粡浣跨敤Orion鍜孴omcat娴嬭瘯杩囷紝鍏煎Servlet 2.3銆丼ervlet 2.4瑙勮寖銆?br> Cacheable鍛戒护锛氳繖鏄竴绉嶈€佺殑鍛戒护琛屾ā寮忥紝鏀寔寮傛琛屼负銆佸閿欍€?br> 鍏煎Hibernate锛屽吋瀹笹oogle App Engine銆?br> 鍩轰簬JTA鐨勪簨鍔℃敮鎸侊紝鏀寔浜嬪姟璧勬簮绠$悊锛屼簩闃舵鎻愪氦鍜屽洖婊氾紝浠ュ強鏈湴浜嬪姟銆?br>
12銆佸紑婧愬崗璁?/span>
Apache 2.0 license

浜屻€丒hcache鐨勫姞杞芥ā鍧楀垪琛?/strong>锛屼粬浠兘鏄嫭绔嬬殑搴擄紝姣忎釜閮戒负Ehcache娣诲姞鏂扮殑鍔熻兘锛屽彲浠?a href="http://ehcache.org/downloads/catalog" target="_blank">鍦ㄦ涓嬭浇 锛?/p>

  • ehcache-core锛欰PI锛屾爣鍑嗙紦瀛樺紩鎿庯紝RMI澶嶅埗鍜孒ibernate鏀寔
  • ehcache锛氬垎甯冨紡Ehcache锛屽寘鎷珽hcache鐨勬牳蹇冨拰Terracotta鐨勫簱
  • ehcache-monitor锛氫紒涓氱骇鐩戞帶鍜岀鐞?/li>
  • ehcache-web锛氫负Java Servlet Container鎻愪緵缂撳瓨銆乬zip鍘嬬缉鏀寔鐨刦ilters
  • ehcache-jcache锛欽SR107 JCACHE鐨勫疄鐜?/li>
  • ehcache-jgroupsreplication锛氫娇鐢↗Group鐨勫鍒?/li>
  • ehcache-jmsreplication锛氫娇鐢↗MS鐨勫鍒?/li>
  • ehcache-openjpa锛歄penJPA鎻掍欢
  • ehcache-server锛歸ar鍐呴儴缃叉垨鑰呭崟鐙儴缃茬殑RESTful cache server
  • ehcache-unlockedreadsview锛氬厑璁窽erracotta cache鐨勬棤閿佽
  • ehcache-debugger锛氳褰昍MI鍒嗗竷寮忚皟鐢ㄤ簨浠?/li>
  • Ehcache for Ruby锛欽ruby and Rails鏀寔

Ehcache鐨勭粨鏋勮璁℃瑙堬細

EhCache 璇﹁В (杞

涓夈€佹牳蹇冨畾涔?/strong>锛?/p>

cache manager锛氱紦瀛樼鐞嗗櫒锛屼互鍓嶆槸鍙厑璁稿崟渚嬬殑锛屼笉杩囩幇鍦ㄤ篃鍙互澶氬疄渚嬩簡

cache锛氱紦瀛樼鐞嗗櫒鍐呭彲浠ユ斁缃嫢骞瞔ache锛屽瓨鏀炬暟鎹殑瀹炶川锛屾墍鏈塩ache閮藉疄鐜颁簡Ehcache鎺ュ彛

element锛氬崟鏉$紦瀛樻暟鎹殑缁勬垚鍗曚綅

system of record锛圫OR锛?/span>锛氬彲浠ュ彇鍒扮湡瀹炴暟鎹殑缁勪欢锛屽彲浠ユ槸鐪熸鐨勪笟鍔¢€昏緫銆佸閮ㄦ帴鍙h皟鐢ㄣ€佸瓨鏀剧湡瀹炴暟鎹殑鏁版嵁搴撶瓑绛夛紝缂撳瓨灏辨槸浠嶴OR涓鍙栨垨鑰呭啓鍏ュ埌SOR涓幓鐨勩€?/p>

浠g爜绀轰緥锛?/p>

Java浠g爜 聽EhCache 璇﹁В (杞
  1. CacheManager聽manager聽=聽CacheManager.newInstance("src/config/ehcache.xml");聽聽
  2. manager.addCache("testCache");聽聽
  3. Cache聽test聽=聽singletonManager.getCache("testCache");聽聽
  4. test.put(new聽Element("key1",聽"value1"));聽聽
  5. manager.shutdown();聽聽

褰撶劧锛屼篃鏀寔杩欑绫讳技DSL鐨勯厤缃柟寮忥紝閰嶇疆閮芥槸鍙互鍦ㄨ繍琛屾椂鍔ㄦ€佷慨鏀圭殑锛?/p>

Java浠g爜 聽EhCache 璇﹁В (杞
  1. Cache聽testCache聽=聽new聽Cache(聽聽
  2. 聽聽new聽CacheConfiguration("testCache",聽maxElements)聽聽
  3. 聽聽聽聽.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)聽聽
  4. 聽聽聽聽.overflowToDisk(true)聽聽
  5. 聽聽聽聽.eternal(false)聽聽
  6. 聽聽聽聽.timeToLiveSeconds(60)聽聽
  7. 聽聽聽聽.timeToIdleSeconds(30)聽聽
  8. 聽聽聽聽.diskPersistent(false)聽聽
  9. 聽聽聽聽.diskExpiryThreadIntervalSeconds(0));聽聽

浜嬪姟鐨勪緥瀛愶細

Java浠g爜 聽EhCache 璇﹁В (杞
  1. Ehcache聽cache聽=聽cacheManager.getEhcache("xaCache");聽聽
  2. transactionManager.begin();聽聽
  3. try聽{聽聽
  4. 聽聽聽聽Element聽e聽=聽cache.get(key);聽聽
  5. 聽聽聽聽Object聽result聽=聽complexService.doStuff(element.getValue());聽聽
  6. 聽聽聽聽cache.put(new聽Element(key,聽result));聽聽
  7. 聽聽聽聽complexService.doMoreStuff(result);聽聽
  8. 聽聽聽聽transactionManager.commit();聽聽
  9. }聽catch聽(Exception聽e)聽{聽聽
  10. 聽聽聽聽transactionManager.rollback();聽聽
  11. }聽聽

鍥涖€佷竴鑷存€фā鍨?/span>锛?/p>

璇村埌涓€鑷存€э紝鏁版嵁搴撶殑涓€鑷存€ф槸鎬庢牱鐨勶紵涓嶅Θ鍏堟潵鍥為【涓€涓嬫暟鎹簱鐨勫嚑涓殧绂荤骇鍒細

鏈彁浜よ锛圧ead Uncommitted锛?/span>锛氬湪璇绘暟鎹椂涓嶄細妫€鏌ユ垨浣跨敤浠讳綍閿併€傚洜姝わ紝鍦ㄨ繖绉嶉殧绂荤骇鍒腑鍙兘璇诲彇鍒版病鏈夋彁浜ょ殑鏁版嵁銆備細鍑虹幇鑴忚銆佷笉鍙噸澶嶈銆佸够璞¤銆?br> 宸叉彁浜よ锛圧ead Committed锛?/span>锛氬彧璇诲彇鎻愪氦鐨勬暟鎹苟绛夊緟鍏朵粬浜嬪姟閲婃斁鎺掍粬閿併€傝鏁版嵁鐨勫叡浜攣鍦ㄨ鎿嶄綔瀹屾垚鍚庣珛鍗抽噴鏀俱€傚凡鎻愪氦璇绘槸鏁版嵁搴撶殑榛樿闅旂绾у埆銆備細鍑虹幇涓嶅彲閲嶅璇汇€佸够璞¤銆?br> 鍙噸澶嶈锛圧epeatable Read锛?/span>锛氬儚宸叉彁浜よ绾у埆閭f牱璇绘暟鎹紝浣嗕細淇濇寔鍏变韩閿佺洿鍒颁簨鍔$粨鏉熴€備細鍑虹幇骞昏薄璇汇€?br> 鍙簭鍒楀寲锛圫erializable锛?/span>锛氬伐浣滄柟寮忕被浼间簬鍙噸澶嶈銆備絾瀹冧笉浠呬細閿佸畾鍙楀奖鍝嶇殑鏁版嵁锛岃繕浼氶攣瀹氳繖涓寖鍥达紝杩欏氨闃绘浜嗘柊鏁版嵁鎻掑叆鏌ヨ鎵€娑夊強鐨勮寖鍥淬€?/p>

鍩轰簬浠ヤ笂锛屽啀鏉ュ姣旀€濊€冧笅闈㈢殑涓€鑷存€фā鍨嬶細

1銆佸己涓€鑷存€фā鍨?/span>锛氱郴缁熶腑鐨勬煇涓暟鎹鎴愬姛鏇存柊(浜嬪姟鎴愬姛杩斿洖)鍚庯紝鍚庣画浠讳綍瀵硅鏁版嵁鐨勮鍙栨搷浣滈兘寰楀埌鏇存柊鍚庣殑鍊笺€傝繖鏄紶缁熷叧绯绘暟鎹簱鎻愪緵鐨勪竴鑷存€фā鍨嬶紝涔熸槸鍏崇郴鏁版嵁搴撴繁鍙椾汉浠枩鐖辩殑鍘熷洜涔嬩竴銆傚己涓€鑷存€фā鍨嬩笅鐨勬€ц兘娑堣€楅€氬父鏄渶澶х殑銆?/p>

2銆佸急涓€鑷存€фā鍨?/span>锛氱郴缁熶腑鐨勬煇涓暟鎹鏇存柊鍚庯紝鍚庣画瀵硅鏁版嵁鐨勮鍙栨搷浣滃緱鍒扮殑涓嶄竴瀹氭槸鏇存柊鍚庣殑鍊硷紝杩欑鎯呭喌涓嬮€氬父鏈変釜鈥滀笉涓€鑷存€ф椂闂寸獥鍙b€濆瓨鍦細鍗虫暟鎹洿鏂板畬鎴愬悗鍦ㄧ粡杩囪繖涓椂闂寸獥鍙o紝鍚庣画璇诲彇鎿嶄綔灏辫兘澶熷緱鍒版洿鏂板悗鐨勫€笺€?/p>

3銆佹渶缁堜竴鑷存€фā鍨?/span>锛氬睘浜庡急涓€鑷存€х殑涓€绉嶏紝鍗虫煇涓暟鎹鏇存柊鍚庯紝濡傛灉璇ユ暟鎹悗缁病鏈夎鍐嶆鏇存柊锛岄偅涔堟渶缁堟墍鏈夌殑璇诲彇鎿嶄綔閮戒細杩斿洖鏇存柊鍚庣殑鍊笺€?/p>

鏈€缁堜竴鑷存€фā鍨嬪寘鍚涓嬪嚑涓繀瑕佸睘鎬э紝閮芥瘮杈冨ソ鐞嗚В锛?/p>

  • 璇诲啓涓€鑷达細鏌愮嚎绋婣锛屾洿鏂版煇鏉℃暟鎹互鍚庯紝鍚庣画鐨勮闂叏閮ㄩ兘鑳藉彇寰楁洿鏂板悗鐨勬暟鎹€?/li>
  • 浼氳瘽鍐呬竴鑷达細瀹冩湰璐ㄤ笂鍜屼笂闈㈤偅涓€鏉℃槸涓€鑷寸殑锛屾煇鐢ㄦ埛鏇存敼浜嗘暟鎹紝鍙浼氳瘽杩樺瓨鍦紝鍚庣画浠栧彇寰楃殑鎵€鏈夋暟鎹兘蹇呴』鏄洿鏀瑰悗鐨勬暟鎹€?/li>
  • 鍗曡皟璇讳竴鑷达細濡傛灉涓€涓繘绋嬪彲浠ョ湅鍒板綋鍓嶇殑鍊硷紝閭d箞鍚庣画鐨勮闂笉鑳借繑鍥炰箣鍓嶇殑鍊笺€?/li>
  • 鍗曡皟鍐欎竴鑷达細瀵瑰悓涓€杩涚▼鍐呯殑鍐欒涓哄繀椤绘槸淇濆簭鐨勶紝鍚﹀垯锛屽啓瀹屾瘯鐨勭粨鏋滃氨鏄笉鍙鏈熺殑浜嗐€?/li>

4銆丅ulk Load锛氳繖绉嶆ā鍨嬫槸鍩轰簬鎵归噺鍔犺浇鏁版嵁鍒扮紦瀛橀噷闈㈢殑鍦烘櫙鑰屼紭鍖栫殑锛屾病鏈夊紩鍏ラ攣鍜屽父瑙勭殑娣樻卑绠楁硶杩欎簺闄嶄綆鎬ц兘鐨勪笢瑗匡紝瀹冨拰鏈€缁堜竴鑷存€фā鍨嬪緢鍍忥紝浣嗘槸鏈夋壒閲忋€侀珮閫熷啓鍜屽急涓€鑷存€т繚璇佺殑鏈哄埗銆?/p>

杩欐牱鍑犱釜API涔熶細褰卞搷鍒颁竴鑷存€х殑缁撴灉锛?/p>

1銆佹樉寮忛攣锛?a href="http://terracotta.org/documentation/enterprise-ehcache/api-guide#31478" target="_blank">Explicit Locking 锛?/span>锛氬鏋滄垜浠湰韬氨閰嶇疆涓哄己涓€鑷存€э紝閭d箞鑷劧鎵€鏈夌殑缂撳瓨鎿嶄綔閮藉叿澶囦簨鍔℃€ц川銆傝€屽鏋滄垜浠厤缃垚鏈€缁堜竴鑷存€ф椂锛屽啀鍦ㄥ閮ㄤ娇鐢ㄦ樉寮忛攣API锛屼篃鍙互杈惧埌浜嬪姟鐨勬晥鏋溿€傚綋鐒惰繖鏍风殑閿佸彲浠ユ帶鍒跺緱鏇寸粏绮掑害锛屼絾鏄緷鐒跺彲鑳藉瓨鍦ㄧ珵浜夊拰绾跨▼闃诲銆?/p>

2銆佹棤閿佸彲璇诲彇瑙嗗浘锛圲nlockedReadsView锛?/span>锛氫竴涓厑璁歌剰璇荤殑decorator锛屽畠鍙兘鐢ㄥ湪寮轰竴鑷存€х殑閰嶇疆涓嬶紝瀹冮€氳繃鐢宠涓€涓壒娈婄殑鍐欓攣鏉ユ瘮瀹屽叏鐨勫己涓€鑷存€ч厤缃彁鍗囨€ц兘銆?/p>

涓句緥濡備笅锛寈ml閰嶇疆涓哄己涓€鑷存€фā鍨嬶細

Xml浠g爜 聽EhCache 璇﹁В (杞
  1. <cache聽name="myCache"聽聽
  2. 聽聽聽聽聽maxElementsInMemory="500"聽聽
  3. 聽聽聽聽聽eternal="false"聽聽
  4. 聽聽聽聽聽overflowToDisk="false"聽聽
  5. 聽聽聽<terracotta聽clustered="true"聽consistency="strong"聽/>聽聽
  6. </cache>聽聽

浣嗘槸浣跨敤UnlockedReadsView锛?/p>

Java浠g爜 聽EhCache 璇﹁В (杞
  1. Cache聽cache聽=聽cacheManager.getEhcache("myCache");聽聽
  2. UnlockedReadsView聽unlockedReadsView聽=聽new聽UnlockedReadsView(cache,聽"myUnlockedCache");聽聽

3銆佸師瀛愭柟娉曪紙Atomic methods锛?/span>锛?鏂规硶鎵ц鏄師瀛愬寲 鐨勶紝鍗矯AS鎿嶄綔锛圕ompare and Swap锛夈€侰AS鏈€缁堜篃瀹炵幇浜嗗己涓€鑷存€х殑鏁堟灉锛屼絾涓嶅悓鐨勬槸锛屽畠鏄噰鐢ㄤ箰瑙傞攣鑰屼笉鏄偛瑙傞攣鏉ュ疄鐜扮殑銆傚湪涔愯閿佹満鍒朵笅锛屾洿鏂扮殑鎿嶄綔鍙兘涓嶆垚鍔燂紝鍥犱负鍦ㄨ繖杩囩▼ 涓彲鑳戒細鏈夊叾浠栫嚎绋嬪鍚屼竴鏉℃暟鎹繘琛屽彉鏇达紝閭d箞鍦ㄥけ璐ュ悗闇€瑕侀噸鏂版墽琛屾洿鏂版搷浣溿€傜幇浠g殑CPU閮芥敮鎸丆AS鍘熻浜嗐€?/p>

Java浠g爜 聽EhCache 璇﹁В (杞
  1. cache.putIfAbsent(Element聽element);聽聽
  2. cache.replace(Element聽oldOne,聽Element聽newOne);聽聽
  3. cache.remove(Element);聽聽

浜斻€佺紦瀛樻嫇鎵戠被鍨?/strong>锛?/p>

1銆佺嫭绔嬬紦瀛橈紙Standalone Ehcache锛?/span>锛氳繖鏍风殑缂撳瓨搴旂敤鑺傜偣閮芥槸鐙珛鐨勶紝浜掔浉涓嶉€氫俊銆?/p>

2銆佸垎甯冨紡缂撳瓨锛圖istributed Ehcache锛?/span>锛氭暟鎹瓨鍌ㄥ湪Terracotta鐨勬湇鍔″櫒闃靛垪锛圱erracotta Server Array锛孴SA锛変腑锛屼絾鏄渶杩戜娇鐢ㄧ殑鏁版嵁锛屽彲浠ュ瓨鍌ㄥ湪鍚勪釜搴旂敤鑺傜偣涓€?/p>

閫昏緫瑙嗚锛?/p>

EhCache 璇﹁В (杞
L1缂撳瓨灏卞湪鍚勪釜搴旂敤鑺傜偣涓婏紝鑰孡2缂撳瓨鍒欐斁鍦–ache Server闃靛垪涓€?/p>

缁勭綉瑙嗚锛?br>EhCache 璇﹁В (杞

妯″瀷瀛樺偍瑙嗚锛?/p>

EhCache 璇﹁В (杞
L1绾х紦瀛樻槸娌℃湁鎸佷箙鍖栧瓨鍌ㄧ殑銆傚彟澶栵紝浠庣紦瀛樻暟鎹噺涓婄湅锛宻erver绔繙澶т簬搴旂敤鑺傜偣銆?/p>

3銆佸鍒跺紡缂撳瓨锛圧eplicated Ehcache锛?/span>锛氱紦瀛樻暟鎹椂鍚屾椂瀛樻斁鍦ㄥ涓簲鐢ㄨ妭鐐圭殑锛屾暟鎹鍒跺拰澶辨晥鐨勪簨浠朵互鍚屾鎴栬€呭紓姝ョ殑褰㈠紡鍦ㄥ悇涓泦缇よ妭鐐归棿浼犳挱銆備笂杩颁簨浠跺埌鏉ユ椂锛屼細闃诲鍐欑嚎绋嬬殑鎿嶄綔銆傚湪杩欑妯″紡涓嬶紝鍙湁寮变竴鑷存€фā鍨嬨€?/p>

瀹冩湁濡備笅鍑犵浜嬩欢浼犳挱鏈哄埗锛歊MI銆丣Groups銆丣MS鍜孋ache Server銆?/p>

RMI妯″紡涓嬶紝鎵€鏈夎妭鐐瑰叏閮ㄥ绛夛細

EhCache 璇﹁В (杞

JGroup妯″紡锛氬彲浠ラ厤缃崟鎾垨鑰呭鎾紝鍗忚鏍堝拰閰嶇疆閮介潪甯哥伒娲汇€?/p>

Xml浠g爜 聽EhCache 璇﹁В (杞
  1. <cacheManagerPeerProviderFactory聽聽
  2. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"聽聽
  3. properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;):PING:聽聽
  4. MERGE2:FD_SOCK:VERIFY_SUSPECT:pbcast.NAKACK:UNICAST:pbcast.STABLE:FRAG:pbcast.GMS"聽聽
  5. propertySeparator="::"聽聽
  6. />聽聽

JMS妯″紡锛氳繖绉嶆ā寮忕殑鏍稿績灏辨槸涓€涓秷鎭槦鍒楋紝姣忎釜搴旂敤鑺傜偣閮借闃呴鍏堝畾涔夊ソ鐨勪富棰橈紝鍚屾椂锛岃妭鐐规湁鍏冪礌鏇存柊鏃讹紝涔熶細鍙戝竷鏇存柊鍏冪礌鍒颁富棰樹腑鍘汇€侸MS瑙勮寖瀹炵幇鑰呬笂锛孫pen MQ鍜孉ctive MQ杩欎袱涓紝Ehcache鐨勫吋瀹规€ч兘宸茬粡娴嬭瘯杩囥€?/p>

EhCache 璇﹁В (杞

Cache Server妯″紡锛氳繖绉嶆ā寮忎笅瀛樺湪涓讳粠鑺傜偣锛岄€氫俊鍙互閫氳繃RESTful鐨凙PI鎴栬€匰OAP銆?/p>

EhCache 璇﹁В (杞

鏃犺涓婇潰鍝釜妯″紡锛屾洿鏂颁簨浠跺張鍙互鍒嗕负updateViaCopy鎴杣pdateViaInvalidate锛屽悗鑰呭彧鏄彂閫佷竴涓繃鏈熸秷鎭紝鏁堢巼瑕侀珮寰楀銆?/p>

澶嶅埗寮忕紦瀛樺鏄撳嚭鐜版暟鎹笉涓€鑷寸殑闂锛屽鏋滆繖鎴愪负涓€涓棶棰橈紝鍙互鑰冭檻浣跨敤鏁版嵁鍚屾鍒嗗彂鐨勬満鍒躲€?/p>

鍗充究涓嶉噰鐢ㄥ垎甯冨紡缂撳瓨鍜屽鍒跺紡缂撳瓨锛屼緷鐒朵細鍑虹幇涓€浜涗笉濂界殑琛屼负锛屾瘮濡傦細

缂撳瓨婕傜Щ锛圕ache Drift锛夛細姣忎釜搴旂敤鑺傜偣鍙鐞嗚嚜宸辩殑缂撳瓨锛屽湪鏇存柊鏌愪釜鑺傜偣鐨勬椂鍊欙紝涓嶄細褰卞搷鍒板叾浠栫殑鑺傜偣锛岃繖鏍锋暟鎹箣闂村彲鑳藉氨涓嶅悓姝ヤ簡銆傝繖鍦╳eb浼氳瘽鏁版嵁缂撳瓨涓儏鍐靛挨鐢氥€?/p>

鏁版嵁搴撶摱棰堬紙Database Bottlenecks 锛夛細瀵逛簬鍗曞疄渚嬬殑搴旂敤鏉ヨ锛岀紦瀛樺彲浠ヤ繚鎶ゆ暟鎹簱鐨勮椋庢毚锛涗絾鏄紝鍦ㄩ泦缇ょ殑鐜涓嬶紝姣忎竴涓簲鐢ㄨ妭鐐归兘瑕佸畾鏈熶繚鎸佹暟鎹渶鏂帮紝鑺傜偣瓒婂锛岃缁存寔杩欐牱鐨勬儏鍐靛鏁版嵁搴撶殑寮€閿€涔熻秺澶с€?/p>

鍏€佸瓨鍌ㄦ柟寮?/strong>锛?/p>

1銆?span style="color: #0000ff;">鍫嗗唴瀛樺偍

锛氶€熷害蹇紝浣嗘槸瀹归噺鏈夐檺銆?/p>

2銆?span style="color: #0000ff;">鍫嗗锛圤ffHeapStore锛夊瓨鍌?/span>锛?琚О涓?BigMemory锛屽彧鍦ㄤ紒涓氱増鏈殑Ehcache涓彁渚涳紝鍘熺悊鏄埄鐢╪io鐨凞irectByteBuffers瀹炵幇锛屾瘮瀛樺偍鍒扮鐩樹笂蹇紝鑰屼笖瀹屽叏涓嶅彈 GC鐨勫奖鍝嶏紝鍙互淇濊瘉鍝嶅簲鏃堕棿鐨勭ǔ瀹氭€э紱浣嗘槸direct buffer鐨勫湪鍒嗛厤涓婄殑寮€閿€瑕佹瘮heap buffer澶э紝鑰屼笖瑕佹眰蹇呴』浠ュ瓧鑺傛暟缁勬柟寮忓瓨鍌紝鍥犳瀵硅薄蹇呴』鍦ㄥ瓨鍌ㄨ繃绋嬩腑杩涜搴忓垪鍖栵紝璇诲彇鍒欒繘琛屽弽搴忓垪鍖栨搷浣滐紝瀹冪殑閫熷害澶х害姣斿爢鍐呭瓨鍌ㄦ參涓€涓暟閲忕骇銆?/p>

锛堟敞锛歞irect buffer涓嶅彈GC褰卞搷锛屼絾鏄痙irect buffer褰掑睘鐨勭殑JAVA瀵硅薄鏄湪鍫嗕笂涓旇兘澶熻GC鍥炴敹鐨勶紝涓€鏃﹀畠琚洖鏀讹紝JVM灏嗛噴鏀綿irect buffer鐨勫爢澶栫┖闂淬€傦級

3銆?span style="color: #0000ff;">纾佺洏瀛樺偍

銆?/p>

涓冦€佺紦瀛樹娇鐢ㄦā寮?/strong>锛?/p>

cache-aside锛氱洿鎺ユ搷浣溿€傚厛璇㈤棶cache鏌愭潯缂撳瓨鏁版嵁鏄惁瀛樺湪锛屽瓨鍦ㄧ殑璇濈洿鎺ヤ粠cache涓繑鍥炴暟鎹紝缁曡繃SOR锛涘鏋滀笉瀛樺湪锛屼粠SOR涓彇寰楁暟鎹紝鐒跺悗鍐嶆斁鍏ache涓€?/p>

Java浠g爜 聽EhCache 璇﹁В (杞
  1. public聽V聽readSomeData(K聽key)聽聽聽
  2. {聽聽
  3. 聽聽聽Element聽element;聽聽
  4. 聽聽聽if聽((element聽=聽cache.get(key))聽!=聽null)聽{聽聽
  5. 聽聽聽聽聽聽聽return聽element.getValue();聽聽
  6. 聽聽聽}聽聽
  7. 聽聽聽if聽(value聽=聽readDataFromDataStore(key))聽!=聽null)聽{聽聽
  8. 聽聽聽聽聽聽聽cache.put(new聽Element(key,聽value));聽聽
  9. 聽聽聽}聽聽聽
  10. 聽聽聽return聽value;聽聽
  11. }聽聽

cache-as-sor锛氱粨鍚堜簡read-through銆亀rite-through鎴杦rite-behind鎿嶄綔锛岄€氳繃缁橲OR澧炲姞浜嗕竴灞備唬鐞嗭紝瀵瑰閮ㄥ簲鐢ㄨ闂潵璇达紝瀹冧笉鐢ㄥ尯鍒暟鎹槸浠庣紦瀛樹腑杩樻槸浠嶴OR涓彇寰楃殑銆?/p>

read-through銆?/p>

write-through銆?/p>

write-behind锛坵rite-back锛?/span>锛氭棦灏嗗啓鐨勮繃绋嬪彉涓哄紓姝ョ殑锛屽張杩涗竴姝ュ欢杩熷啓鍏ユ暟鎹殑杩囩▼銆?/p>

Copy Cache鐨勪袱涓ā寮忥細CopyOnRead鍜孋opyOnWrite銆?/p>

CopyOnRead鎸囩殑鏄湪璇荤紦瀛樻暟鎹殑璇锋眰鍒拌揪鏃讹紝濡傛灉鍙戠幇鏁版嵁宸茬粡杩囨湡锛岄渶瑕侀噸鏂颁粠婧愬鑾峰彇锛屽彂璧风殑copy element鐨勬搷浣滐紙pull锛夛紱

CopyOnWrite鍒欐槸鍙戠敓鍦ㄧ湡瀹炴暟鎹啓鍏ョ紦瀛樻椂锛屽彂璧风殑鏇存柊鍏朵粬鑺傜偣鐨刢opy element鐨勬搷浣滐紙push锛夈€?/p>

鍓嶈€呴€傚悎鍦ㄤ笉鍏佽澶氫釜绾跨▼璁块棶鍚屼竴涓猠lement鐨勬椂鍊欎娇鐢紝鍚庤€呭垯鍏佽浣犺嚜鐢辨帶鍒剁紦瀛樻洿鏂伴€氱煡鐨勬椂鏈恒€?/p>

鏇村push鍜宲ull鐨勫彉鍖栧拰涓嶅悓锛屼篃鍙?a href="http://raychase.iteye.com/blog/1337015" target="_blank">鍙傝杩欓噷銆?/p>

鍏€佸绉嶉厤缃柟寮?/strong>锛?/p>

鍖呮嫭閰嶇疆鏂囦欢銆佸0鏄庡紡閰嶇疆銆佺紪绋嬪紡閰嶇疆锛岀敋鑷抽€氳繃鎸囧畾鏋勯€犲櫒鐨勫弬鏁版潵瀹屾垚閰嶇疆锛岄厤缃璁$殑鍘熷垯鍖呮嫭锛?/p>

鎵€鏈夐厤缃鏀惧埌涓€璧?/p>

缂撳瓨鐨勯厤缃彲浠ュ緢瀹规槗鍦ㄥ紑鍙戦樁娈点€佽繍琛屾椂淇敼

閿欒鐨勯厤缃兘澶熷湪绋嬪簭鍚姩鏃跺彂鐜帮紝鍦ㄨ繍琛屾椂淇敼鍑洪敊鍒欓渶瑕佹姏鍑鸿繍琛屾椂寮傚父

鎻愪緵榛樿閰嶇疆锛屽嚑涔庢墍鏈夌殑閰嶇疆閮芥槸鍙€夌殑锛岄兘鏈夐粯璁ゅ€?/p>

涔濄€佽嚜鍔ㄨ祫婧愭帶鍒?/span>锛圓utomatic Resource Control锛孉RC锛夛細

瀹冩槸鎻愪緵浜嗕竴绉嶆櫤鑳介€斿緞鏉ユ帶鍒剁紦瀛橈紝璋冧紭鎬ц兘銆傜壒鎬у寘鎷細

鍐呭瓨鍐呯紦瀛樺璞″ぇ灏忕殑鎺у埗锛岄伩鍏峅OM鍑虹幇

姹犲寲锛坈ache manager绾у埆锛夌殑缂撳瓨澶у皬鑾峰彇锛岄伩鍏嶅崟鐙绠楃紦瀛樺ぇ灏忕殑娑堣€?/p>

鐏垫椿鐨勭嫭绔嬪熀浜庡眰鐨勫ぇ灏忚绠楄兘鍔涳紝涓嬪浘涓彲浠ョ湅鍒帮紝涓嶅悓灞傜殑澶у皬閮芥槸鍙互鍗曠嫭鎺у埗鐨?/p>

鍙互缁熻瀛楄妭澶у皬銆佺紦瀛樻潯鐩暟鍜岀櫨鍒嗘瘮

浼樺寲楂樺懡涓暟鎹殑鑾峰彇锛屼互鎻愬崌鎬ц兘锛屽弬瑙佷笅闈㈠缂撳瓨鏁版嵁鍦ㄤ笉鍚屽眰涔嬮棿鐨勬祦杞殑浠嬬粛

EhCache 璇﹁В (杞

缂撳瓨鏁版嵁鐨勬祦杞寘鎷簡杩欐牱鍑犵琛屼负锛?/p>

Flush锛氱紦瀛樻潯鐩悜浣庡眰娆$Щ鍔ㄣ€?/p>

Fault锛氫粠浣庡眰鎷疯礉涓€涓璞″埌楂樺眰銆傚湪鑾峰彇缂撳瓨鐨勮繃绋嬩腑锛屾煇涓€灞傚彂鐜拌嚜宸辩殑璇ョ紦瀛樻潯鐩凡缁忓け鏁堬紝灏辫Е鍙戜簡Fault琛屼负銆?/p>

Eviction锛氭妸缂撳瓨鏉$洰闄ゅ幓銆?/p>

Expiration锛氬け鏁堢姸鎬併€?/p>

Pinning锛氬己鍒剁紦瀛樻潯鐩繚鎸佸湪鏌愪竴灞傘€?/p>

涓嬮潰鐨勫浘鍙嶆槧浜嗘暟鎹湪鍚勪釜灞備箣闂寸殑娴佽浆锛屼篃鍙嶆槧浜嗘暟鎹殑鐢熷懡鍛ㄦ湡锛?/p>

EhCache 璇﹁В (杞

鍗併€佺洃鎺у姛鑳?/span>锛?/p>

鐩戞帶鐨勬嫇鎵戯細

EhCache 璇﹁В (杞
姣忎釜搴旂敤鑺傜偣閮ㄧ讲涓€涓洃鎺ф帰閽堬紝閫氳繃TCP鍗忚涓庣洃鎺ф湇鍔″櫒鑱旂郴锛屾渶缁堝皢鏁版嵁鎻愪緵缁欏瘜鏂囨湰瀹㈡埛绔垨鑰呯洃鎺ф搷浣滄湇鍔″櫒銆?/p>

鍗佷竴銆佸箍鍩熺綉澶嶅埗锛?/p>

缂撳瓨鏁版嵁澶嶅埗鏂归潰锛孍hcache鍏佽涓や釜鍦扮悊浣嶇疆鍚勫紓鐨勮妭鐐瑰湪骞垮煙缃戜笅缁存寔鏁版嵁涓€鑷存€э紝鍚屾椂瀹冩彁渚涗簡杩欐牱鍑犵鏂规锛堟敞锛氫笅闈㈢殑绀轰緥閮藉彧缁樺埗浜嗕袱涓妭鐐圭殑鎯呭舰锛屽疄闄呭彲浠ユ帹骞垮埌N涓妭鐐癸級锛?/p>

绗竴绉嶆柟妗堬細Terracotta Active/Mirror Replication銆?/p>

EhCache 璇﹁В (杞
杩欑鏂规涓嬶紝鏈嶅姟绔寘鍚竴涓椿璺冭妭鐐癸紝涓€涓浠借妭鐐癸紱鍚勪釜搴旂敤鑺傜偣鍏ㄩ儴闈犺娲昏穬鑺傜偣鎻愪緵璇诲啓鏈嶅姟銆傝繖绉嶆柟寮忔渶绠€鍗曪紝绠$悊瀹规槗锛涗絾鏄紝闇€瑕佸瘎甯屾湜浜庣悊鎯崇殑缃戠粶鐘跺喌锛屾湇鍔″櫒涔嬮棿鍜屽鎴风鍒版湇鍔″櫒涔嬮棿閮藉瓨鍦ㄨ蛋WAN鐨勬儏鍐碉紝杩欐牱鐨勬柟妗堝叾瀹炴渶涓嶇ǔ瀹氥€?/p>

绗簩绉嶆柟妗堬細Transactional Cache Manager Replication銆?/p>

EhCache 璇﹁В (杞
杩?绉嶆柟妗堜笅锛屾暟鎹鍙栦笉闇€瑕佺粡杩嘩AN锛屽啓鍏ユ暟鎹椂鍐欏叆涓や唤锛屽垎鍒敱涓や釜cache manager澶勭悊锛屼竴浠藉湪鏈湴Server锛屼竴浠藉埌鍏朵粬Server鍘汇€傝繖绉嶆柟妗堜笅璇荤殑鍚炲悙閲忚緝楂樿€屼笖寤惰繜杈冧綆锛涗絾鏄渶瑕佸紩鍏ヤ竴涓猉A浜嬪姟绠$悊鍣紝涓や釜 cache manager鍐欎袱浠芥暟鎹鑷村啓寮€閿€杈冨ぇ锛岃€屼笖杩嘩AN鐨勫啓寤惰繜渚濈劧鍙兘瀵艰嚧绯荤粺鍝嶅簲鐨勭摱棰堛€?/p>

绗笁绉嶆柟妗堬細Messaging based (AMQ) replication銆?/p>

EhCache 璇﹁В (杞
杩?绉嶆柟妗堜笅锛屽紩鍏ヤ簡鎵归噺澶勭悊鍜岄槦鍒楋紝鐢ㄤ互鍑忕紦WAN鐨勭摱棰堝嚭鐜帮紝鍚屾椂锛屾妸澶勭悊璇昏姹傚拰澶嶅埗閫昏緫浠嶴erver Array鐗╃悊涓婂氨鍓ョ寮€锛岄伩鍏嶄簡WAN鎯呭喌鎭跺寲瀵硅妭鐐硅鍙栦笟鍔$殑褰卞搷銆傝繖绉嶆柟妗堣杈冮珮鐨勫悶鍚愰噺鍜岃緝浣庣殑寤惰繜锛岃/澶嶅埗鐨勫垎绂讳繚璇佷簡鍙互鎻愪緵瀹屽鐨勬秷鎭垎 鍙戜繚璇併€佸啿绐佸鐞嗙瓑鐗规€э紱浣嗘槸瀹冭緝涓哄鏉傦紝鑰屼笖杩橀渶瑕佷竴涓秷鎭€荤嚎銆?/p>

鏈変竴浜汦hcache鐗规€у簲鐢ㄨ緝灏戞垨鑰呮瘮杈冭竟缂樺寲锛屾病鏈夋彁鍒帮紝渚嬪瀵逛簬JMX鐨勬敮鎸侊紱杩樻湁涓€浜涘垯鏄湁绫讳技鐨勭壒鎬у拰浠嬬粛浜嗭紝渚嬪瀵逛簬WEB鐨勬敮鎸侊紝璇峰弬瑙佹垜杩欑瘒鍏充簬OSCache鐨勮В璇?/a>锛屽叾涓殑鈥渨eb鏀寔鈥濅竴鑺傛湁璇︾粏鐨勫師鐞嗗垎鏋愩€?/p>

鏈€鍚庯紝鍏充簬Ehcache鐨勬€ц兘姣斿锛屼笅闈㈣繖寮犲浘鏉ヨ嚜Ehcache鐨勫垱濮嬩汉Greg Luck鐨刡log锛?/p>

EhCache 璇﹁В (杞

put/get 涓奅hcache瑕?00-1000鍊嶅揩杩嘙emcached銆傚師鍥犱綍鍦紵浠栬嚜宸卞垎鏋愰亾锛氣€淚n-process caching and asynchronous replication are a clear performance winner鈥濄€傛湁鍏冲畠璇︾粏鐨勫唴瀹硅繕鏄鍙傞槄浠栫殑blog鍚с€?/p>

杞嚜锛?/p>

http://raychase.iteye.com/blog/1545906