锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓婂懆鍙傚姞Qcon錛屾湁涓厔寮熷垎浜鏉緋葷粺鐨勪紭鍖栵紝鍏惰鐐規(guī)湁浜涜禐鍚岋紝澶ч儴鍒嗚鐐瑰嵈騫朵笉鍚屾剰錛岀粨鍚堣嚜宸辯殑緇忛獙錛岃皥璋堣嚜宸辯殑涓浜涚湅娉曘?/span>
涓銆佷負(fù)浠涔堥毦
縐掓潃緋葷粺闅懼仛鐨勫師鍥狅細(xì)搴撳瓨鍙湁涓浠斤紝鎵鏈変漢浼?xì)鍦ㄩ泦涓殑鏃堕棿璇诲拰鍐櫂q欎簺鏁版嵁銆?/span>
渚嬪灝忕背鎵嬫満姣忓懆浜岀殑縐掓潃錛屽彲鑳芥墜鏈哄彧鏈?涓囬儴錛屼絾鐬椂榪涘叆鐨勬祦閲忓彲鑳芥槸鍑犵櫨鍑犲崈涓囥?/span>
鍙堜緥濡?2306鎶㈢エ錛屼害涓庣鏉綾諱技錛岀灛鏃舵祦閲忔洿鐢氥?/span>
浜屻佸父瑙佹灦鏋?/strong>
嫻侀噺鍒頒簡(jiǎn)浜跨駭鍒紝甯歌绔欑偣鏋舵瀯濡備笂錛?br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;" />
1錛?span style="margin: 0px; padding: 0px; max-width: 100%; color: #ff0000; box-sizing: border-box !important; word-wrap: break-word !important;">嫻忚鍣ㄧ錛屾渶涓婂眰錛屼細(xì)鎵ц鍒頒竴浜汮S浠g爜
2錛?span style="margin: 0px; padding: 0px; max-width: 100%; color: #ff0000; box-sizing: border-box !important; word-wrap: break-word !important;">绔欑偣灞?/span>錛岃繖涓灞備細(xì)璁塊棶鍚庣鏁版嵁錛屾嫾html欏甸潰榪斿洖緇欐祻瑙堝櫒
3錛?span style="margin: 0px; padding: 0px; max-width: 100%; color: #ff0000; box-sizing: border-box !important; word-wrap: break-word !important;">鏈嶅姟灞?/span>錛屽悜涓婃父灞忚斀搴曞眰鏁版嵁緇嗚妭
4錛?span style="margin: 0px; padding: 0px; max-width: 100%; color: #ff0000; box-sizing: border-box !important; word-wrap: break-word !important;">鏁版嵁灞?/span>錛屾渶緇堢殑搴撳瓨鏄瓨鍦ㄨ繖閲岀殑錛宮ysql鏄竴涓吀鍨?/span>
涓夈佷紭鍖栨柟鍚?/strong>
1錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">灝嗚姹傚敖閲忔嫤鎴湪緋葷粺涓婃父錛氫紶緇熺鏉緋葷粺涔嬫墍浠ユ寕錛岃姹傞兘鍘嬪掍簡(jiǎn)鍚庣鏁版嵁灞傦紝鏁版嵁璇誨啓閿佸啿紿佷弗閲嶏紝騫跺彂楂樺搷搴旀參錛屽嚑涔庢墍鏈夎姹傞兘瓚呮椂錛屾祦閲忚櫧澶э紝涓嬪崟鎴愬姛鐨勬湁鏁堟祦閲忕敋灝忋愪竴瓚熺伀杞﹀叾瀹炲彧鏈?000寮犵エ錛?00w涓漢鏉ヤ拱錛屽熀鏈病鏈変漢鑳戒拱鎴愬姛錛岃姹傛湁鏁堢巼涓?銆?/span>
2錛?span style="margin: 0px; padding: 0px; max-width: 100%; color: #ff0000; box-sizing: border-box !important; word-wrap: break-word !important;">鍏呭垎鍒╃敤緙撳瓨錛氳繖鏄竴涓吀鍨嬬殑璇誨浜涘皯鐨勫簲鐢ㄥ満鏅愪竴瓚熺伀杞﹀叾瀹炲彧鏈?000寮犵エ錛?00w涓漢鏉ヤ拱錛屾渶澶?000涓漢涓嬪崟鎴愬姛錛屽叾浠栦漢閮芥槸鏌ヨ搴撳瓨錛屽啓姣斾緥鍙湁0.1%錛岃姣斾緥鍗?9.9%銆戯紝闈炲父閫傚悎浣跨敤緙撳瓨
鍥涖佷紭鍖栫粏鑺?/strong>
4.1錛夋祻瑙堝櫒灞傝姹傛嫤鎴?/span>
鐐瑰嚮浜?#8220;鏌ヨ”鎸夐挳涔嬪悗錛岀郴緇熼偅涓崱鍛錛岃繘搴︽潯娑ㄧ殑鎱㈠憖錛屼綔涓虹敤鎴鳳紝浼?xì)涓嶈嚜瑙夌殑鍐嶅幦潅瑰?#8220;鏌ヨ”錛岀戶緇偣錛岀戶緇偣錛岀偣鐐圭偣銆傘傘傛湁鐢ㄤ箞錛熷鉤鐧芥棤鏁呯殑澧炲姞浜?jiǎn)绯痪l熻礋杞斤紙涓涓敤鎴風(fēng)偣5嬈★紝80%鐨勮姹傛槸榪欎箞澶氬嚭鏉ョ殑錛夛紝鎬庝箞鏁達(dá)紵
a錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">浜у搧灞傞潰錛岀敤鎴風(fēng)偣鍑?#8220;鏌ヨ”鎴栬?#8220;璐エ”鍚庯紝鎸夐挳緗伆錛岀姝㈢敤鎴烽噸澶嶆彁浜よ姹?/strong>
b錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">JS灞傞潰錛岄檺鍒剁敤鎴峰湪x縐掍箣鍐呭彧鑳芥彁浜や竴嬈¤姹?/strong>
濡傛闄愭祦錛?0%嫻侀噺宸叉嫤
4.2錛夌珯鐐瑰眰璇鋒眰鎷︽埅涓庨〉闈㈢紦瀛?/span>
嫻忚鍣ㄥ眰鐨勮姹傛嫤鎴紝鍙兘鎷︿綇灝忕櫧鐢ㄦ埛錛堜笉榪囪繖鏄?9%鐨勭敤鎴峰摕錛夛紝楂樼鐨勭▼搴忓憳鏍規(guī)湰涓嶅悆榪欎竴濂楋紝鍐欎釜for寰幆錛岀洿鎺ヨ皟鐢ㄤ綘鍚庣鐨刪ttp璇鋒眰錛屾庝箞鏁達(dá)紵
a錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">鍚屼竴涓猽id錛岄檺鍒惰闂搴︼紝鍋氶〉闈㈢紦瀛?/strong>錛寈縐掑唴鍒拌揪绔欑偣灞傜殑璇鋒眰錛屽潎榪斿洖鍚屼竴欏甸潰
b錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">鍚屼竴涓猧tem鐨勬煡璇紝渚嬪鎵嬫満杞︽錛屽仛欏甸潰緙撳瓨錛寈縐掑唴鍒拌揪绔欑偣灞傜殑璇鋒眰錛屽潎榪斿洖鍚屼竴欏甸潰
濡傛闄愭祦錛屽張鏈?9%鐨勬祦閲忎細(xì)琚嫤鎴湪绔欑偣灞?/span>
4.3錛夋湇鍔″眰璇鋒眰鎷︽埅涓庢暟鎹紦瀛?/span>
绔欑偣灞傜殑璇鋒眰鎷︽埅錛屽彧鑳芥嫤浣忔櫘閫氱▼搴忓憳錛岄珮綰ч粦瀹紝鍋囪浠栨帶鍒朵簡(jiǎn)10w鍙拌倝楦★紙騫朵笖鍋囪涔扮エ涓嶉渶瑕佸疄鍚嶈璇侊級(jí)錛岃繖涓媢id鐨勯檺鍒朵笉琛屼簡(jiǎn)鍚э紵鎬庝箞鏁達(dá)紵
a錛夊ぇ鍝ワ紝鎴戞槸鏈嶅姟灞傦紝鎴戞竻妤氱殑鐭ラ亾灝忕背鍙湁1涓囬儴鎵嬫満錛屾垜娓呮鐨勭煡閬撲竴鍒楃伀杞﹀彧鏈?000寮犺濺紲紝鎴戦?0w涓姹傚幓鏁版嵁搴撴湁浠涔堟剰涔夊憿錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">瀵逛簬鍐欒姹傦紝鍋氳姹傞槦鍒楋紝姣忔鍙忚繃鏈夐檺鐨勫啓璇鋒眰鍘繪暟鎹眰錛屽鏋滃潎鎴愬姛鍐嶆斁涓嬩竴鎵癸紝濡傛灉搴撳瓨涓嶅鍒欓槦鍒楅噷鐨勫啓璇鋒眰鍏ㄩ儴榪斿洖“宸插敭瀹?#8221;
b錛?strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;">瀵逛簬璇昏姹?/strong>錛岃繕鐢ㄨ涔堬紵cache鏉ユ姉錛屼笉綆℃槸memcached榪樻槸redis錛屽崟鏈烘姉涓瘡縐?0w搴旇閮芥槸娌′粈涔堥棶棰樼殑
濡傛闄愭祦錛屽彧鏈夐潪甯稿皯鐨勫啓璇鋒眰錛屽拰闈炲父灝戠殑璇葷紦瀛榤is鐨勮姹備細(xì)閫忓埌鏁版嵁灞傚幓錛屽張鏈?9.9%鐨勮姹傝鎷︿綇浜?/span>
4.4錛夋暟鎹眰闂插涵淇℃
鍒頒簡(jiǎn)鏁版嵁榪欎竴灞傦紝鍑犱箮灝辨病鏈変粈涔堣姹備簡(jiǎn)錛屽崟鏈轟篃鑳芥墰寰椾綇錛岃繕鏄偅鍙ヨ瘽錛屽簱瀛樻槸鏈夐檺鐨勶紝灝忕背鐨勪駭鑳芥湁闄愶紝閫忚繃榪囧璇鋒眰鏉ユ暟鎹簱娌℃湁鎰忎箟銆?/span>
浜斻佹葷粨
娌′粈涔堟葷粨浜?jiǎn)锛屼笂鏂囧簲璇ユ弿杩扮殑闈炲父娓呮浜?jiǎn)錛屽浜庣鏉緋葷粺錛屽啀嬈¢噸澶嶄笅絎旇呯殑涓や釜鏋舵瀯浼樺寲鎬濊礬錛?/span>
1錛夊敖閲忓皢璇鋒眰鎷︽埅鍦ㄧ郴緇熶笂娓?/span>
2錛夎澶氬啓灝戠殑甯哥敤澶氫嬌鐢ㄧ紦瀛?/span>
鍏充簬榪欎釜鏈哄埗緗戜笂鏈夊緢澶氳В閲婄殑錛屾垜涓漢鐨勬葷粨濡備笅銆?/p>
Memcached鐨勫唴瀛樺垎閰嶄互page涓哄崟浣嶏紝榛樿鎯呭喌涓嬩竴涓猵age鏄?M錛屽彲浠ラ氳繃-I鍙傛暟鍦ㄥ惎鍔ㄦ椂鎸囧畾銆傚鏋滈渶瑕佺敵璇峰唴瀛樻椂錛宮emcached浼?xì)鍒掑垎鍑轰竴涓柊鐨刾age騫跺垎閰嶇粰闇瑕佺殑slab鍖?img border="0" alt="" src="http://m.tkk7.com/images/blogjava_net/stevenjohn/images/11.jpg" width="511" longdesc="" height="272" />
鍩熴俻age涓鏃﹁鍒嗛厤鍦ㄩ噸鍚墠涓嶄細(xì)琚洖鏀舵垨鑰呴噸鏂板垎閰嶏紙page ressign宸茬粡浠?.2.8鐗堢Щ闄や簡(jiǎn)錛?span class="Apple-converted-space">
Memcached騫朵笉鏄皢鎵鏈夊ぇ灝忕殑鏁版嵁閮芥斁鍦ㄤ竴璧風(fēng)殑錛岃屾槸棰勫厛灝嗘暟鎹┖闂村垝鍒嗕負(fù)涓緋誨垪slabs錛屾瘡涓猻lab鍙礋璐d竴瀹氳寖鍥村唴鐨勬暟鎹瓨鍌ㄣ傚涓嬪浘錛屾瘡涓猻lab鍙瓨鍌ㄥぇ浜庡叾涓婁竴涓猻lab鐨剆ize騫跺皬浜庢垨鑰呯瓑浜庤嚜宸辨渶澶ize鐨勬暟鎹備緥濡傦細(xì)slab 3鍙瓨鍌ㄥぇ灝忎粙浜?37 鍒?224 bytes鐨勬暟鎹傚鏋滀竴涓暟鎹ぇ灝忎負(fù)230byte灝嗚鍒嗛厤鍒皊lab 4涓備粠涓嬪浘鍙互鐪嬪嚭錛屾瘡涓猻lab璐熻矗鐨勭┖闂村叾瀹炴槸涓嶇瓑鐨勶紝memcached榛樿鎯呭喌涓嬩笅涓涓猻lab鐨勬渶澶у間負(fù)鍓嶄竴涓殑1.25鍊嶏紝榪欎釜鍙互閫氳繃淇敼-f鍙傛暟鏉ヤ慨鏀瑰闀挎瘮渚嬨?span class="Apple-converted-space">
Chunk鏄竴緋誨垪鍥哄畾鐨勫唴瀛樼┖闂達(dá)紝榪欎釜澶у皬灝辨槸綆$悊瀹冪殑slab鐨勬渶澶у瓨鏀懼ぇ灝忋備緥濡傦細(xì)slab 1鐨勬墍鏈塩hunk閮芥槸104byte錛岃宻lab 4鐨勬墍鏈塩hunk閮芥槸280byte銆俢hunk鏄痬emcached瀹為檯瀛樻斁緙撳瓨鏁版嵁鐨勫湴鏂癸紝鍥犱負(fù)chunk鐨勫ぇ灝忓浐瀹氫負(fù)slab鑳藉瀛樻斁鐨勬渶澶у鹼紝鎵浠ユ墍鏈夊垎閰嶇粰褰撳墠slab鐨勬暟鎹兘鍙互琚玞hunk瀛樹笅銆傚鏋滄椂闂寸殑鏁版嵁澶у皬灝忎簬chunk鐨勫ぇ灝忥紝絀轟綑鐨勭┖闂村皢浼?xì)琚棽缃Q岃繖涓槸涓轟簡(jiǎn)闃叉鍐呭瓨紕庣墖鑰岃璁$殑銆備緥濡備笅鍥撅紝chunk size鏄?24byte錛岃屽瓨鍌ㄧ殑鏁版嵁鍙湁200byte錛屽墿涓嬬殑24byte灝嗚闂茬疆銆?span class="Apple-converted-space">
Memcached鍦ㄥ惎鍔ㄦ椂閫氳繃-m鎸囧畾鏈澶т嬌鐢ㄥ唴瀛橈紝浣嗘槸榪欎釜涓嶄細(xì)涓鍚姩灝卞崰鐢紝鏄殢鐫闇瑕侀愭鍒嗛厤緇欏悇slab鐨勩?br /> 濡傛灉涓涓柊鐨勭紦瀛樻暟鎹琚瓨鏀撅紝memcached棣栧厛閫夋嫨涓涓悎閫傜殑slab錛岀劧鍚庢煡鐪嬭slab鏄惁榪樻湁絀洪棽鐨刢hunk錛屽鏋滄湁鍒欑洿鎺ュ瓨鏀捐繘鍘伙紱濡傛灉娌℃湁鍒欒榪涜鐢寵銆俿lab鐢寵鍐呭瓨鏃朵互page涓哄崟浣嶏紝鎵浠ュ湪鏀懼叆絎竴涓暟鎹紝鏃犺澶у皬涓哄灝戯紝閮戒細(xì)鏈?M澶у皬鐨刾age琚垎閰嶇粰璇lab銆傜敵璇峰埌page鍚庯紝slab浼?xì)灏啒q欎釜page鐨勫唴瀛樻寜chunk鐨勫ぇ灝忚繘琛屽垏鍒嗭紝榪欐牱灝卞彉鎴愪簡(jiǎn)涓涓猚hunk鐨勬暟緇勶紝鍦ㄤ粠榪欎釜chunk鏁扮粍涓夋嫨涓涓敤浜庡瓨鍌ㄦ暟鎹傚涓嬪浘錛宻lab 1鍜宻lab 2閮藉垎閰嶄簡(jiǎn)涓涓猵age錛屽茍鎸夊悇鑷殑澶у皬鍒囧垎鎴恈hunk鏁扮粍銆?span class="Apple-converted-space">
緇煎悎涓婇潰鐨勪粙緇嶏紝memcached鐨勫唴瀛樺垎閰嶇瓥鐣ュ氨鏄細(xì)鎸塻lab闇姹傚垎閰峱age錛屽悇slab鎸夐渶浣跨敤chunk瀛樺偍銆?br />榪欓噷鏈夊嚑涓壒鐐硅娉ㄦ剰錛?/p>
鐭ラ亾浜?jiǎn)杩欎簺浠ュ悗锛尀鍙互鐞嗚В湄?fù)浠涔堟誨唴瀛樻病鏈夎鍏ㄩ儴鍗犵敤鐨勬儏鍐典笅錛宮emcached鍗村嚭鐜頒簡(jiǎn)涓㈠け緙撳瓨鏁版嵁鐨勯棶棰樹簡(jiǎn)銆?br />*******************
褰撳瓨鍌ㄧ殑鍊糹tem澶т簬1M鐨勬椂鍊欙細(xì)
1M 鐢ㄥ畬浼?xì)鐢宠涓涓柊鐨?nbsp;1M
Memcached 鏄竴涓珮鎬ц兘鐨勫垎甯冨紡鍐呭瓨瀵硅薄緙撳瓨緋葷粺錛岀敤浜庡姩鎬乄eb搴旂敤浠ュ噺杞繪暟鎹簱璐熻澆銆傚畠閫氳繃鍦ㄥ唴瀛樹腑緙撳瓨鏁版嵁鍜屽璞℃潵鍑忓皯璇誨彇鏁版嵁搴撶殑嬈℃暟錛屼粠鑰屾彁渚涘姩鎬併佹暟鎹簱椹卞姩緗戠珯鐨勯熷害銆侻emcached鍩轟簬涓涓瓨鍌ㄩ敭/鍊煎鐨刪ashmap銆傚叾瀹堟姢榪涚▼錛坉aemon 錛夋槸鐢–鍐欑殑錛屼絾鏄鎴風(fēng)鍙互鐢ㄤ換浣曡璦鏉ョ紪鍐欙紝騫墮氳繃memcached鍗忚涓庡畧鎶よ繘紼嬮氫俊銆備絾鏄畠騫朵笉鎻愪緵鍐椾綑錛堜緥濡傦紝澶嶅埗鍏秇ashmap鏉$洰錛夛紱褰撴煇涓湇鍔″櫒S鍋滄榪愯鎴栧穿婧冧簡(jiǎn)錛屾墍鏈夊瓨鏀懼湪S涓婄殑閿?鍊煎閮藉皢涓㈠け銆?/p>
Memcached瀹樻柟錛?a style="margin: 0px; padding: 0px; color: #6fbc4c; text-decoration: initial;">http://danga.com/memcached/
鍏充簬Memcached鐨勪粙緇嶈鍙傝冿細(xì)Memcached娣卞害鍒嗘瀽
涓嬭澆Windows鐨凷erver绔?/strong>
涓嬭澆鍦板潃錛?a style="margin: 0px; padding: 0px; color: #6fbc4c; text-decoration: initial;">http://code.jellycan.com/memcached/
windows鏈嶅姟绔笅杞藉湴鍧:濡備綍鍦ㄤ竴涓腑鍨嬬殑Java搴旂敤涓嬌鐢∕emcached緙撳瓨鏁版嵁涓嶆槸涓畝鍗曠殑闂銆傚綋鏌愪釜緙撳瓨鏁版嵁闇瑕佸湪澶氫釜緋葷粺闂村叡浜拰澶辨晥鏃訛紝蹇呴』瑕佹湁緇熶竴鐨勮鍒掓墠鑳戒繚璇佷笉鍑洪敊銆傜粡榪囧悇縐嶅疄璺碉紝鐩墠緋葷粺鍦ㄤ嬌鐢∕emcached緙撳瓨鏁版嵁鍏ㄩ儴閲囩敤Simple-Spring-Memcached妗嗘灦鏉ュ畬鎴愶紝騫剁粺涓瑙勫垝鍚勭郴緇烻pring鍜孋ache key鐨勯厤緗?br />涓嬮潰瀵瑰湪浣跨敤榪囩▼涓渶瑕佹敞鎰忕殑鐐瑰仛涓涓緇嗚鏄庯細(xì)
鐩墠鎴戜滑緋葷粺涓湁涓や釜涓嶅悓鐨凪emcached鏈嶅姟鍣細(xì)
鐢變簬搴旂敤鎵鏈夌殑緙撳瓨鏁版嵁閮芥斁鍦╝pp緙撳瓨涓婏紝涓洪伩鍏嶅悇搴旂敤鐨勭紦瀛樻暟鎹嚭鐜板啿紿侊紝蹇呴』瑙勫垝濂藉畠浠殑鍛藉悕絀洪棿銆傛墍騫窼imple-Spring-Memcached鏀寔namespace鐨勬蹇碉紝鍥犳瀵瑰悇搴旂敤鐨刵amespace鍓嶇紑瑙勫畾濡備笅錛?/p>
搴旂敤 | NAMESPACE鍓嶇紑 | |
---|---|---|
goodscenter | goodscenter | |
trade | trade | |
uic | uic |
榪欎釜namespace鍦ㄧ敓鎴恔ey鏃訛紝灝嗘斁鍦ㄦ渶鍓嶉潰錛岀◢鍚庝細(xì)鏈変緥瀛愯榪般?br />鍚屼竴涓簲鐢ㄤ腑瀛樺湪璁稿闇瑕佺紦瀛樼殑瀵硅薄錛屽洜姝ょ害瀹歯amespace鍓嶇紑涔嬪悗鍐嶅姞涓婄紦瀛樺璞$殑綾誨悕銆?br />渚嬪瓙濡備笅錛?/p>
搴旂敤 | 緙撳瓨瀵硅薄 | 瀹屾暣鐨凬AMESPACE | 鏈緇堢敓鎴愮殑KEY |
---|---|---|---|
trade | TcRate (id涓?2) | trade:TcRate | trade:TcRate:12 |
goodscenter | GoodsDo(id涓?2) | goodscenter:GoodsDo | goodscenter:GoodsDo:12 |
Simple-Spring-Memcached鎻愪緵鐨勯拡瀵瑰崟涓璞$殑娉ㄨВ鎺ュ彛鎻愪緵浜?jiǎn)涓たU峩ey鐢熸垚鏂瑰紡錛?a title="浣跨敤SSM娉ㄨВ鍋氱紦瀛樻搷浣滐紙涓錛? target="_blank" style="cursor: pointer; color: #eb374b;">璇︽儏瑙佹鏂?/a>
瀵逛簬絎竴縐嶅彧瑕佹眰蹇呴』淇濊瘉key涓嶄笌鍏跺畠鐨勫啿紿侊紝涓攏amesapce絎﹀悎瑙勫垯銆?br />絎簩縐嶆椂錛岀害瀹氱紦瀛樼殑鏁版嵁瀵硅薄蹇呴』瀹炵幇鏈夊甫CacheKeyMethod鐨刢acheKey鏂規(guī)硶錛屽弬鑰冨疄鐜板涓嬶細(xì)
@CacheKeyMethod public String cacheKey() { return this.getId(); }
![]() | 鐩墠@CacheKeyMethod鍙敮鎸佽繑鍥濻tring鐨勬柟娉曪紝闇瑕佹敼閫犳垚鍙帴鍙桳ong錛孖nteger鍨嬬殑銆傚綋鍓嶅繀欏繪湁鍗曠嫭鐨勬柟娉曟潵浣滀負(fù)緙撳瓨Key鐨勭敓鎴愬櫒 |
![]() | 鐪熷疄瀛樻斁鍒癕emcached鐨刱ey鐨勭敓鎴愯鍒欐槸錛歯amespace:key銆?br />濡俫oodscenter鐨刬d涓?2鐨刣omain瀵硅薄GoodsDo,鎸変笂榪版柟寮忕敓鎴愮殑key涓猴細(xì)goodscenter:GoodsDo:42 |
鍏充簬Simple-Spring-Memcached鍏蜂綋XML閰嶇疆濡備笅錛?/p>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <import resource="classpath:simplesm-context.xml"/> <aop:aspectj -autoproxy/> <context:annotation -config/> <bean name="appCache" class="com.google.code.ssm.CacheFactory"> <property name="cacheClientFactory"> <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl"/> </property> <property name="addressProvider"> <bean class="com.google.code.ssm.config.DefaultAddressProvider"> <!--memcached鏈嶅姟鍣╥p:port 鍙互鏄涓紝鏍煎紡涓? 127.0.0.1:11211,192.168.100.11:11211--> <property name="address" value="{memcached.server}"/> </bean> </property> <property name="configuration"> <!-- memcached榪炴帴鍣ㄧ殑閰嶇疆錛屽叿浣撶殑閰嶇疆欏瑰弬鑰冭繖涓被 --> <bean class="com.google.code.ssm.providers.XMemcachedConfiguration"> <!--鏄惁浣跨敤涓鑷存у搱甯?-> <property name="consistentHashing" value="true"/> <!--榪炴帴姹?-> <property name="connectionPoolSize" value="10"/> <property name="optimizeGet" value="true"/> </bean> </property> <property name="cacheName"> <!-- 璇emcached閰嶇疆鐨凜ache鍚嶇О 涓涓簲鐢ㄤ腑瀛樺湪澶氫釜Memcached鏃訛紝鍚勪釜閰嶇疆鐨刢acheName蹇呴』涓嶅悓銆傚鏋滆鍊兼湭璁撅紝緋葷粺榛樿涓篸efault --> <value>appCache</value> </property> </bean> </beans>
鐩存帴浣跨敤娉ㄨВ鏉ュ鐞嗙紦瀛樺強(qiáng)澶辨晥闈炲父綆鍗曪紝涓嬮潰鏄浉搴旂殑渚嬪瓙錛?br />璇誨彇緙撳瓨錛?/strong>
@Override @ReadThroughSingleCache(namespace = "goodscenter:EventGoodsDo", expiration = 60) @CacheName("appCache") public EventGoodsDo queryEventGoodsDo(@ParameterValueKeyProvider(order = 0) long goodsId, @ParameterValueKeyProvider(order = 1) long eventId) { return getRemoteServiceBean().queryEventGoodsDo(goodsId, eventId); }
鏇存柊緙撳瓨錛?/strong>
@BridgeMethodMappings(value = {@BridgeMethodMapping(erasedParamTypes ={Object.class},targetParamTypes = {com.hqb360.promotion.dao.entity.EventGoods.class},methodName = "update")}) public class EventGoodsDaoImpl<EventGoods> extends BaseDaoImpl<EventGoods> implements EventGoodsDao<EventGoods> { @Override public DaoStatementName getDaoStatementName() { return new DefaultDaoStatementName() { public String getDomainName() { return "EventGoods"; } }; } @Override @InvalidateSingleCache(namespace = "goodscenter:EventGoodsDo") @CacheName("appCache") public void update(@ParameterValueKeyProvider EventGoods obj) throws DataAccessException { super.update(obj); } }
@CacheKeyMethod public String getCacheKey() { return goodsId + CACHE_ID_SEPARATOR + eventId; } public static final String CACHE_ID_SEPARATOR = "/";
鏌愪簺鍦烘櫙鎴戜滑甯屾湜鏇翠究鎹峰湴鑷繁鎵嬪姩鏉ョ鐞嗙紦瀛樻暟鎹紝姝ゆ椂闇瑕佷嬌鐢⊿imple-Spring-Memcached閰嶇疆涓畾涔夌殑bean銆備互涓婇潰鐨勯厤緗枃浠朵負(fù)渚嬶紝浣跨敤鏂規(guī)硶濡備笅
bean鐨勬敞鍏ワ細(xì)
@Autowired private Cache appCache;
bean鐨勪嬌鐢?
appCache.set(Constants.CACHE_KEY + members.getMemberId(), 3600,cacheValue);
Posted in Java
@CacheKeyMethod:緙撳瓨key鐢熸垚娉ㄨВ
---------------------------------璇誨彇-------------------------------------------
@ReadThroughAssignCache(assignedKey = "SomePhatKey", namespace = "Echo", expiration = 3000): 璇誨彇鎸囧畾key緙撳瓨
@ReadThroughSingleCache(namespace = SINGLE_NS, expiration = 0):璇誨彇鍗曚釜緙撳瓨
@ReadThroughMultiCache(option = @ReadThroughMultiCacheOption(generateKeysFromResult = true)):璇誨彇澶氫釜緙撳瓨
@ReadThroughMultiCacheOption(generateKeysFromResult = true) 璇誨彇澶氫釜緙撳瓨鎿嶄綔generateKeysFromResult 閫氳繃緇撴灉鐢熸垚key
---------------------------------鏇存柊-------------------------------------------
@UpdateAssignCache(assignedKey = "SomePhatKey", namespace = "Echo", expiration = 3000): 鎸囧畾key鏇存柊緙撳瓨
@UpdateSingleCache(namespace = SINGLE_NS, expiration = 2): 鏇存柊鍗曚釜緙撳瓨(namespace 鍛藉悕絀洪棿, expiration 澶辨晥鏃墮棿鍗曚綅縐?
@UpdateMultiCache(namespace = "Bravo", expiration = 300): 鏇存柊澶氫釜緙撳瓨
---------------------------------澶辨晥-------------------------------------------
@InvalidateAssignCache(assignedKey = "SomePhatKey", namespace = "Echo") : 鎸囧畾key澶辨晥緙撳瓨
@InvalidateSingleCache(namespace = SINGLE_NS):澶辨晥鍗曚釜緙撳瓨
@InvalidateMultiCache(namespace = "Delta") : 澶辨晥澶氫釜緙撳瓨
---------------------------------鍙傛暟-------------------------------------------
@ParameterDataUpdateContent: 鏍囪鏂規(guī)硶鐨勫弬鏁頒綔涓烘洿鏂板唴瀹廣傝繖涓敞瑙e簲緇撳悎Update*Cache娉ㄨВ浣跨敤
@ParameterValueKeyProvider: 鏍囪灝嗘柟娉曠殑鍙傛暟鍋氫負(fù)璁$畻緙撳瓨key.濡傛灉鏂規(guī)硶琚敞瑙g殑瀵硅薄鏍囪CacheKeyMethod鐨勬柟娉曞皢浼?xì)鐢ㄦ潵鐢熸垚缂撳瓨key鍚﹀垯璋冪敤toString()鐢熸垚
@ParameterValueKeyProvider(order=0) 灞炴ц〃紺哄鏋滃涓弬鏁板仛涓簁ey鏃墮渶鎻愪緵鍙傛暟欏哄簭
涓嶡ParameterValueKeyProvider綾諱技鐨勬敞瑙f湁:
{
@ReturnValueKeyProvider: 榪斿洖鍊煎璞′腑璁$畻key
}
---------------------------------娉涘瀷澶勭悊-------------------------------------------
@BridgeMethodMappings({ @BridgeMethodMapping(methodName = "updateUser",
erasedParamTypes = { Object.class }, targetParamTypes = { AppUser.class }) }): 娉涘瀷妗ユ帴娉ㄨВ
methodName : 鎸囧畾鏂規(guī)硶
erasedParamTypes : 鎿﹂櫎瀵硅薄綾誨瀷
targetParamTypes : 鐩爣杞崲綾誨瀷
---------------------------------璁℃暟鍣?------------------------------------------
@InvalidateAssignCache :鍦ㄧ粰鐨勮綆楀櫒涓婂姞1. 濡傛灉涓嶅瓨鍦ㄥ垯鍒濆鍖栦負(fù)1
@DecrementCounterInCache : 鍦ㄧ粰鐨勮鏁板櫒涓婂噺1
@ReadCounterFromCache :璇誨彇璁℃暟鍣?/span>
@UpdateCounterFromCache : 鏇存柊璁℃暟鍣?/span>
Simple-Spring-Memcached浠g爜闃呰涔婤ridgeMethod
http://www.colorfuldays.org/program/java/bridgemethod%E7%9A%84%E4%BD%9C%E7%94%A8/
http://www.colorfuldays.org/tag/ssm/ 榪欎釜緋誨垪涓嶉敊
鏌愪簺鍦烘櫙鎴戜滑甯屾湜鏇翠究鎹峰湴鑷繁鎵嬪姩鏉ョ鐞嗙紦瀛樻暟鎹紝姝ゆ椂闇瑕佷嬌鐢⊿imple-Spring-Memcached閰嶇疆涓畾涔夌殑bean銆備互涓婇潰鐨勯厤緗枃浠朵負(fù)渚嬶紝浣跨敤鏂規(guī)硶濡備笅
bean鐨勬敞鍏ワ細(xì)
@Autowired private Cache appCache;
bean鐨勪嬌鐢?
appCache.set(Constants.CACHE_KEY + members.getMemberId(), 3600,cacheValue);
瀛︿範(fàn)浜?jiǎn)memcache錛岃繖鏄釜濂戒笢瑗匡紝鍒嗕韓涓涓嬭嚜宸辯殑灝忓疄渚嬶紝涔熸柟渚夸互鍚庢煡鎵句嬌鐢?/p>
涓銆佸墠鏈熷噯澶?/p>
1) 涓嬭澆memcached鏈嶅姟绔痬emcached-1.2.6-win32-bin.zip錛屽湴鍧錛歨ttp:
//code.jellycan.com/memcached/
2) 涓嬭澆java鐗堝鎴風(fēng) java_memcached-release_2.6.1.zip
3) 瑙e帇緙﹎emcached-1.2.6-win32-bin.zip鍒版寚瀹氱洰褰曪紝渚嬪錛欴:\memcached-1.2.6-win32 錛?/code>鍦ㄧ粓绔紙鍗砪md鍛戒護(hù)琛岀晫闈級(jí)
D:\memcached-1.2.6-win32\memcached.exe -d install
D:\memcached\memcached.exe -d start
榪欐牱memcache灝變細(xì)浣滀負(fù)windows緋葷粺鏈嶅姟鍦ㄦ瘡嬈″紑鏈烘椂鍚姩memcache鏈嶅姟銆?/code>
package com.abin.lee.spring.memcache;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.danga.MemCached.MemCachedClient;
public class MemcacheUtilTest {
static MemCachedClient memcachedClient;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
ApplicationContext context= new ClassPathXmlApplicationContext("com/abin/lee/spring/memcache/spring-memcache.xml");
memcachedClient= (MemCachedClient)context.getBean("memcachedClient");
}
@Test
public void test() {
memcachedClient.set("name", "abin");
System.out.println(memcachedClient.get("name"));
}
}
- 鍒癶ttp://code.jellycan.com/memcached/涓嬭澆紼沖畾鐗堛?/p>
- 涓嬭澆鍚庤В鍘嬪埌鏌愪釜鐩樹笅闈紝姣斿鍦╟:\memcached錛屽湪緇堢錛堜篃鍗砪md鍛戒護(hù)鐣岄潰錛変笅杈撳叆 ‘c:\memcached\memcached.exe -d install’ 瀹夎銆?/p>
- 鍐嶈緭鍏ワ細(xì) ‘c:\memcached\memcached.exe -d start’ 鍚姩銆?/p>
- 淇敼memcache鐨勫唴瀛樺ぇ灝忥紝鍙互鍦ㄦ敞鍐岃〃閲屾壘鍒癏KEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/memcached Server錛屼慨鏀笽magePath鐨勫間負(fù)
“C:/memcached/memcached.exe” -d runservice -m 512
NOTE: Windows鐗堟湰涓鑸敤浣滃紑鍙戣皟璇曞彧鐢紝涓嶅緩璁湪浜у搧鐜涓嬌鐢ㄣ?br />
浜岋細(xì)JAVA榪炴帴浣跨敤Memcached
1, 涓嬭澆memcached瀹㈡埛绔紑鍙戝寘錛屽湴鍧https://github.com/gwhalin/Memcached-Java-Client
2錛屼笅闈㈡槸涓涓繛鎺ュ茍浣跨敤鐨勭畝鍗曚緥瀛?/p>
package com.ea.online.memcache;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MyClass {
// create a static client as most installs only need
// a single instance
protected static MemCachedClient mcc = new MemCachedClient();
protected static SockIOPool pool = null;
// set up connection pool once at class load
static {
// Server list
String[] servers = { "localhost:11211" };
// Specify memcached capacity
Integer[] weights = { 3, 3, 2 };
/*
* String[] serverlist = { "cache0.server.com:12345",
* "cache1.server.com:12345" }; Integer[] weights = { new
* Integer(5), new Integer(2) }; int initialConnections = 10; int
* minSpareConnections = 5; int maxSpareConnections = 50; long
* maxIdleTime = 1000 * 60 * 30; // 30 minutes long maxBusyTime = 1000 *
* 60 * 5; // 5 minutes long maintThreadSleep = 1000 * 5; // 5 seconds
* int socketTimeOut = 1000 * 3; // 3 seconds to block on reads int
* socketConnectTO = 1000 * 3; // 3 seconds to block on initial
* connections. If 0, then will use blocking connect (default) boolean
* failover = false; // turn off auto-failover in event of server down
* boolean nagleAlg = false; // turn off Nagle's algorithm on all
* sockets in pool boolean aliveCheck = false; // disable health check
* of socket on checkout
*
* SockIOPool pool = SockIOPool.getInstance();
* pool.setServers(serverlist);
* pool.setWeights(weights);
* pool.setInitConn(initialConnections);
* pool.setMinConn(minSpareConnections);
* pool.setMaxConn(maxSpareConnections); pool.setMaxIdle(maxIdleTime);
* pool.setMaxBusyTime(maxBusyTime);
* pool.setMaintSleep(maintThreadSleep);
* pool.setSocketTO(socketTimeOut); pool.setNagle(nagleAlg);
* pool.setHashingAlg(SockIOPool.NEW_COMPAT_HASH);
* pool.setAliveCheck(true); pool.initialize();
*/
// grab an instance of our connection pool
pool = SockIOPool.getInstance();
// set the servers and the weights
pool.setServers(servers);
pool.setWeights(weights);
// Specify main thread maintain frequency
pool.setMaintSleep(30);
// set some TCP settings
// disable nagle
pool.setNagle(false);
// set the read timeout to 3 secs
pool.setSocketTO(3000);
// and don't set a connect timeout
pool.setSocketConnectTO(0);
// initialize the connection pool
pool.initialize();
}
// from here on down, you can call any of the client calls
public static void main(String[] args) {
// Test expired
mcc.set("foo", "This is a test String", new Date(
new Date().getTime() + 3000));
String bar = mcc.get("foo").toString();
System.out.println("test-->" + bar);
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(mcc.get("foo"));
}
// pool.shutDown();
}
}
璇︾粏浣跨敤鍙互鍊熼壌榪欑瘒鏂囩珷錛歨ttp://sillycat.iteye.com/blog/563615
涓夛細(xì)緇撳悎AOP緙栫▼
1錛屽浜巑emcached涓巗pring aop鐨勯泦鎴愮綉涓婂張鏄竴鍫嗭紝榪欓噷涓嶆彁浜?jiǎn)銆?br /> 2錛屽浜巑emcached涓巊uice aop鐨勯泦鎴愬彲鍙傝僪ttp://code.google.com/p/google-guice/wiki/AOP
3錛屽浜庨渶瑕侀氳繃鎵嬪姩瀹炵幇鍔ㄦ佷唬鐞嗙殑鏂瑰紡鏉ュ疄鐜癆OP鐨勫彲浠ュ弬鑰?http://m.tkk7.com/DoubleJ/archive/2008/03/04/183796.html
鍥涳細(xì)涓涓畝鍗曠殑鐜粫閫氱煡鍒囬潰錛屼笉鍙繍琛岋紝浠呬綔鍙傝?/strong>
public Around implements MethodInterceptor {
....
public Object invoke(MethodInvocation mi, Object[] args) {
Object obj = null;
//浠嶮emcached涓幏鍙?br /> obj = mcc.get(this.class.getName() + mi.getMethodName() + args.hashcode());
if(obj != null) {
return obj;
}
obj = method.invoke(args);
//瀛樺叆Memcached
mcc.set(this.class.getName() + mi.getMethodName() + args.hashcode, obj, expiredDate);
return obj;
}
....
}
鍗椾含-HF(226358522) 11:22:44
瀵?br />ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:22:50
鍔爉c 鏈潵灝辨槸涓轟簡(jiǎn)鍑忓皯mysql鎿嶄綔鐨勩傘?br />ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:22:54
榪欐牱瀛愰兘娌″暐鎰忎箟浜?jiǎn)銆傘?br />鍗椾含-HF(226358522) 11:23:07
搴旇鏄痬ysql閲岄潰鏈夎Е鍙戝櫒錛屽綋鏁版嵁鏈夋敼鍙橈紝灝變細(xì)鍚屾鍒癿emcached
鍗椾含-HF(226358522) 11:23:30
灝辯湅浣犱互鍝釜鏁版嵁涓轟富浜?br />鍗椾含-HF(226358522) 11:24:04
榪欐牱memcached鐨勭洰鐨勫氨鏄姞蹇綘鐨勬煡璇㈤熷害
娌ф搗闀塊(136419390) 11:24:18
榪欐柟妗堟牴鎹嚜宸遍渶姹傝瀹?br />娌ф搗闀塊(136419390) 11:24:23
緇勫悎寰堝鍚?br />ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:25:03
鏈榪戜篃紕板埌銆傘俶ysql涓巑c鍚屾鐨勩傘備笉鐭ラ亾鏈夊暐濂芥柟妗?br />鍗椾含-HF(226358522) 11:25:08
姣曠珶錛屾煡璇㈢敤鐨勬槸鏈澶氱殑銆備慨鏀規(guī)垨鑰呮彃鍏ョ殑璇濓紝鏁版嵁搴撶殑鏁版嵁蹇呴』寰楄竟錛屾墍浠ユ墠鏈夎繖涔堜釜鏂規(guī)銆傚綋鐒惰繖涓篃涓嶄竴瀹氶傚悎浣犱滑鐨勫満鏅紝浣犺嚜宸卞彇鑸?br />鍗椾含-HF(226358522) 11:26:21
濡傛灉浣犵殑鏁版嵁錛屽鍒犳敼鏌ラ兘寰堥綣侀偅榪欑灝變笉閫傚悎浜?br />ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:26:54
鎭┿傘傝繖鏍風(fēng)殑璇濊鍐欓兘鐩存帴瀵筸c鎿嶄綔銆傘傜劧鍚庡畾鏃跺悓姝ャ傘?br />ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:27:09
浣嗘槸铔嬬柤鐨勫氨鏄悓姝ユ柟妗堛傘?/font>
ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:27:25
涓嶅ソ鍋氬閲忓悓姝ャ傘?br />娌ф搗闀塊(136419390) 11:27:31
鏈夋椂鍋氫簺鍐椾綑鏄笉閿欑殑
ζ 榪囦簡(jiǎn)鏃剁殑嫻佽 鈾?779014475) 11:27:36
鏈嶅姟绔敤c鍐欑殑銆?br />