亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

對(duì)memcache分布式的一點(diǎn)理解

系統(tǒng) 1879 0

pecl的memcache擴(kuò)展(注意,不是memcache的擴(kuò)展,兩者不同)中連接memcache服務(wù)器有兩種方式:

1.短連接(Memcache::connect)

使用方法 Memcache::connect() 打開的連接在腳本執(zhí)行結(jié)束后會(huì)自動(dòng)關(guān)閉。當(dāng)然,你也可以使用方法 Memcache::close() 來主動(dòng)關(guān)閉?

2.長連接(Memcache::connect)

這個(gè)連接不會(huì)在腳本執(zhí)行結(jié)束后或者 Memcache::close() 被調(diào)用后關(guān)閉,持久化連接僅僅會(huì)在web服務(wù)器關(guān)機(jī)/重啟時(shí)關(guān)閉?。

?

memcache的分布式是通過?Memcache::addServer這個(gè)方法實(shí)現(xiàn)的,下面在windows下測試memcache的分布式實(shí)現(xiàn)

1.在命令行啟動(dòng)兩個(gè)memcache服務(wù)器,分別監(jiān)聽11211和11212端口:

memcached . exe?-p? 11211 ? start

memcached . exe?-p? 11212 ? start ?

?

?2.將以下php代碼保存到localhost/index.php,用瀏覽器瀏覽一次index.php

? <? php

???? function ?createCache()
????{
????????
$arr = array (??
????????????
array ( " host " => " 127.0.0.1 " , " port " => 11211 , " weight " => 20 ) , // 127.0.0.1:11211的權(quán)重是20%
????????????
array ( " host " => " 127.0.0.1 " , " port " => 11212 , " weight " => 80 ) ,? // 127.0.0.1:11212的權(quán)重是80%
????????);
????????
$cache = new ?memcache;
????????
foreach ?( $arr ? as ? $ele ?)
????????{
? ? //使用長連接,并且設(shè)置不同memcache服務(wù)器的權(quán)重,將memcache服務(wù)器添加到連接池

????????????
$cache -> addServer( $ele [ " host " ] , $ele [ " port " ] , true , $ele [ " weight " ] );????????????
????????}
????????
return ? $cache ;
????}
? ? $cache ? = ?createCache?();
? ? for ( $i = 0 ; $i < 10 ; $i ++ )
? ? {
//由于使用了分布式,所以這里不需要使用connect或者pconnect打開鏈接,set方法會(huì)調(diào)用memcache的分布式緩存分配算法,按照權(quán)重將緩存項(xiàng)緩存到連接池的某個(gè)服務(wù)器
? ? ? ??
if ( $cache -> set( $i , $i , 0 , 3600 ))
? ? ? ? {
? ? ? ? ? ??
echo ? " 緩存成功,key: $i ,value: $i " ;
? ? ? ? }
else ?
? ? ? ? {
? ? ? ? ? ??
echo ? " 緩存失敗 " ;
? ? ? ? }
? ? ? ??
echo ? " <br/> " ;
? ? }
?>

?

3.再開啟兩個(gè)cmd窗口,分別輸入如下內(nèi)容:

//第一個(gè)窗口
telnet?
127.0 . 0.1 ? 11211 ? //先登入memcache服務(wù)器
stats??//查看服務(wù)器當(dāng)前狀態(tài)

結(jié)果如下圖所示:
對(duì)memcache分布式的一點(diǎn)理解 ?

?

//第二個(gè)窗口
telnet?
127.0 . 0.1 ? 11212 ? //先登入memcache服務(wù)器
stats??//查看服務(wù)器當(dāng)前狀態(tài)
結(jié)果如下圖所示:
對(duì)memcache分布式的一點(diǎn)理解


根據(jù)上面的測試情況,發(fā)現(xiàn)
1.兩個(gè)memcache服務(wù)器當(dāng)前連接數(shù)(curr_connections)都是2,這是因?yàn)?

$cache -> addServer( $ele [ " host " ] , $ele [ " port " ] , true , $ele [ " weight " ] ) ?第三個(gè)參數(shù)指定使用長連接,所以每個(gè)memcache服務(wù)器保存了兩個(gè)連接:一個(gè)是php里的長連接,一個(gè)是telnet登陸的連接(如果不信,我們多刷新幾次 index .php這個(gè)頁面,再調(diào)用stats命令,發(fā)現(xiàn)兩臺(tái)memcache服務(wù)器的 curr_connections還是2

2.127.0.0.1:11211的current_items為4,

127.0.0.1:11212的current_items為6,這說明十個(gè)緩存項(xiàng)有4個(gè)存到了第一臺(tái)服務(wù)器,有6個(gè)存到了第二胎服務(wù)器,雖然與20%和80%的權(quán)重不符,但是相信緩存項(xiàng)越多,越趨近這個(gè)權(quán)重。

?

?

?

在多做幾次實(shí)驗(yàn)還會(huì)發(fā)現(xiàn):?

?(1).將127.0.0.1:11211和

127.0.0.1:11212兩臺(tái)memcache服務(wù)器都關(guān)掉,再打開127.0.0.1:11211,然后訪問index.php,頁面輸出如下內(nèi)容:
對(duì)memcache分布式的一點(diǎn)理解

?

?在命令行 telnet 127.0.0.1 11211 再stats,得到如下結(jié)果:

? 對(duì)memcache分布式的一點(diǎn)理解

通過上面的結(jié)果我們得出結(jié)論, 當(dāng)一個(gè)memcache連接池的某個(gè)服務(wù)器down掉以后,通過memcache分布式緩存分配算法分配到down掉的服務(wù)器的緩存不會(huì)被丟棄,而是會(huì)存儲(chǔ)到另外的服務(wù)器上。

再編寫一個(gè)存儲(chǔ)到localhost/get.php的get.php ,內(nèi)容如下:

? <? php

function ?createCache()?{
????
$arr ? = ? array ?( array ?( " host " ? => ? " 127.0.0.1 " , ? " port " ? => ? 11211 , ? " weight " ? => ? 20 ?) , ? array ?( " host " ? => ? " 127.0.0.1 " , ? " port " ? => ? 11212 , ? " weight " ? => ? 80 ?)?);
????
$cache ? = ? new ?memcache?();
????
foreach ?(? $arr ? as ? $ele ?)?{
????????
$cache -> addServer?(? $ele ?[ " host " ] , ? $ele ?[ " port " ] , ? true , ? $ele ?[ " weight " ] , ? 1 ?);
????}
????
return ? $cache ;
}
$cache ? = ?createCache?();
$val ;
for ( $i ? = ? 0 ;? $i ? < ? 10 ;? $i ? ++ )?{
????
$val ? = ? $cache -> get?(? $i ?);
????
if ?( false ? === ? $val )?{
????????
echo ? " 緩存獲取失敗 " ;
????}?
else ?{
????????
echo ? " 緩存獲取成功:,key: $val ,value: $val " ;
????}
????
echo ? " <br/> " ;
}
$cache -> close?();
?>

?訪問localhost/get.php,內(nèi)容輸出如下:
對(duì)memcache分布式的一點(diǎn)理解

? 我們發(fā)現(xiàn)php程序嘗試去連接127.0.0.1:11212發(fā)現(xiàn)其不在線后又去127.0.0.1:11211找到了對(duì)應(yīng)的緩存項(xiàng),這和設(shè)置緩存時(shí) 分布式緩存分配算法 的表現(xiàn)是一致的
? 奇怪的是接著打開127.0.0.1:11212這個(gè)memcache服務(wù)器后再訪問localhost/get.php,輸出內(nèi)容如下:
對(duì)memcache分布式的一點(diǎn)理解
為什么明明緩存在127.0.0.1:11211都存在,卻有6個(gè)緩存項(xiàng)顯示找不到緩存呢?我覺得是這樣的:當(dāng)通過$cache->get獲取緩存的時(shí)候,分布式緩存分配算法 推算出6個(gè)緩存項(xiàng)是存儲(chǔ)在127.0.0.1:11212這個(gè)memcache服務(wù)器上的,接著發(fā)現(xiàn)127.0.0.1:11212這個(gè)memcache服務(wù)器是在線的,所以即使沒有找到對(duì)應(yīng)的緩存也不會(huì)像上一步一樣去 127.0.0.1:11211尋找緩存

(2)假設(shè)127.0.0.1:11211和127.0.0.1:11212都已經(jīng)開啟 當(dāng)我們將 ? $cache -> addServer( $ele [ " host " ] , $ele [ " port " ] , true , $ele [ " weight " ] ); ????

改為??

$cache -> addServer( $ele [ " host " ] , $ele [ " port " ] ,false , $ele [ " weight " ] );

發(fā) 現(xiàn)無論刷新多少次localhost/index.php和localhost/get.php,stats 127.0.0.1:11211和127.0.0.1:11212會(huì)看到curr_connections總為1,這是因?yàn)槭褂枚踢B接后每一次頁面腳本執(zhí) 行完畢都會(huì)關(guān)掉連接,所以兩個(gè)memcache服務(wù)器都只有telnet一個(gè)連接在線。

?

(3) 加入set和get的memcache服務(wù)器連接池的連接一樣但是順序不一樣,會(huì)發(fā)現(xiàn)get緩存的時(shí)候明明set的所有緩存項(xiàng)都存入了對(duì)應(yīng)的memcache服務(wù)器但是很多緩存項(xiàng)就是取不到,既set的時(shí)候使用如下連接池:

? $arr = array (??
????????????
array ( " host " => " 127.0.0.1 " , " port " => 11211 , " weight " => 20 ) , // 127.0.0.1:11211的權(quán)重是20%
????????????
array ( " host " => " 127.0.0.1 " , " port " => 11212 , " weight " => 80 ) ,? // 127.0.0.1:11212的權(quán)重是80%
????????);

get的時(shí)候使用如下連接池:

$arr = array (? ???????????
? ? ? ? ?? array ( " host " => " 127.0.0.1 " , " port " => 11212 , " weight " => 80 ) ,? // 127.0.0.1:11212的權(quán)重是80%????
?????????? array ( " host " => " 127.0.0.1 " , " port " => 11211 , " weight " => 20 ) // 127.0.0.1:11211的權(quán)重是20% ??????????
??????? );

?

?

對(duì)memcache分布式的一點(diǎn)理解


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久毛片 | 久久日韩 | 久草手机在线观看 | 亚洲日本在线观看视频 | 日本xxxx色视频在线观看免 | 天天干天天做 | 国产精品午夜在线观看 | 60岁妇女毛片 | 天天天天天天干 | 视频三区精品中文字幕 | 欧美精品在线一区二区三区 | 91亚洲国产在人线播放午夜 | 乱码一区二区三区完整视频 | 曰本亚洲欧洲色a在线 | 精品国产一区二区三区免费 | 一级欧美一级日韩毛片99 | 国产高清自拍视频 | 亚洲十欧美十日韩十国产 | 4huh34四虎最新888| 精品毛片免费看 | 成人在线免费视频 | 久久精品视频免费 | 一级毛片中文字幕 | 国产欧美日本亚洲精品五区 | 国产96精品 | 草莓视频一区二区精品 | 九九亚洲精品 | 国产精品资源 | 久久成人小视频 | 四虎精品影院在线观看视频 | 精品国产夜色在线 | 一级片在线免费观看 | 久草精品在线播放 | 四虎影院成人在线观看 | 国产精品中文字幕在线 | 欧美一级在线全免费 | 激情亚州| 热久在线 | 手机看片福利久久 | 日韩欧美伦理 | 久久久四虎成人永久免费网站 |