Memcached詳解分解_第1頁
Memcached詳解分解_第2頁
Memcached詳解分解_第3頁
Memcached詳解分解_第4頁
Memcached詳解分解_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Memcached 技術(shù) 介紹:memcached是一種緩存技術(shù),他可以把你的數(shù)據(jù)放入內(nèi)存,從而通過內(nèi)存訪問提速,因?yàn)閮?nèi)存最快的,memcached技術(shù)的主要目的提速,在memachec中維護(hù)了一張大的 hashtable表,該表是在內(nèi)存,表的結(jié)構(gòu)是key value字串(字串,數(shù)值,數(shù)組,對象,布爾,二進(jìn)制數(shù)據(jù),null)安裝并使用 memcached安裝步驟(1)下載memcached軟件(2)安裝進(jìn)入cmd,切換到 memcached.exe文件所在目錄memcached.exe -d install(3)啟動(dòng) memcached第一種,可以到服務(wù)點(diǎn)擊啟動(dòng)第二種,命令行memcached

2、.exe -m 200MB -d start 【以 deamon 方式啟動(dòng) 默認(rèn) 64M 】如果你在啟動(dòng)時(shí),win7啟動(dòng)不成功,則可以使用如下方法memcached.exe -p 端口號啟動(dòng)方法不要關(guān)閉控制臺(tái).端口號的范圍:0-65535 ,因?yàn)槎丝谔柺怯脙蓚€(gè)字節(jié)來表示有名端口 : 0-1024 已經(jīng)用程序使用,apache 80 , mysql 3306 , ftp 21 , ssh 22oracle: 1521, stmp: 25使用netstat -an如果看到11211端口在監(jiān)聽,說明啟動(dòng) oknetstat wnb是哪個(gè)程序監(jiān)聽,這個(gè)指令還可以看到有哪些用戶連接到我們的服務(wù)器如果沒有

3、安裝好,原因可能1 .如果你是win7, win7對安全性高,所有,必須以 adminstartor身份來安裝. 你切換成adminstrator ,去安裝,在啟動(dòng)2 .你的memcached.exe目錄有中文,或特殊字符,保證目錄沒有中文和特殊字符(4)準(zhǔn)備研究如果對 memcached進(jìn)彳f curd操彳.看看telnet如何操作 (curd)1 .登錄到telnet連接到memcached服務(wù)telnet 11211如果你們不能使用telnet是因?yàn)橄到y(tǒng)不存在telnet.exe ,就可以到其它機(jī) 器上拷貝telnet.exe 放在 c:windowssystem32

4、即可2 .增加基本語法是:add key名0存放時(shí)間(秒)數(shù)據(jù)大?。ㄗ址┡e例:add key1 0 30 53 .如何獲取基本語法是:get key 值get key14 .修改set key名0存放時(shí)間 數(shù)據(jù)大小.舉例:set keyl 0 40 5?如果keyl不存在,則相當(dāng)于增加新,如果存在,則相當(dāng)有替換 replace key名 存放時(shí)間 數(shù)據(jù)大小replace keyl 0 40 5?如果keyl不存在,則失敗,這個(gè)指令要求key必須存在5 .刪除基本語法是delete key 名比如append key 0 60 15prepend key 0 60 15delete keyl

5、append Append data to existing key prepend Prepend data to existing keyflush_all可以統(tǒng)一把數(shù)據(jù)清空tatsSTAT pid 11904STAT upt ine 1142STfiT time 1357617633STAT vet's ion 1 _S _6STfiT pointer_si2e 32STAT c(Jirr_items 10STfiT total_iteui£ 40STAT bytes 6108TAT curr-Connections 16STAT total_connections 5

6、9STfiT connection_structures 23STAT cnd_jfet 75STfiT cmd_set 74STfiT aet_hits 38STAT get_nisses 37STAT evictions 0STAT bytes_read 6282STAT bytes_written 21738STAT limit_nxbytes 67108864STAT threads 1fc:ND這里主要大家可以去計(jì)算出命中率cmd_hits/cmd_get .越高越好.如何使用php程序操作我們的 memcached服務(wù)curd.步驟,準(zhǔn)備工作.(1)把 php_memcache.d

7、ll 文件拷貝 php 的 ext 下?不同版本的php所使用的 php_memcache.dll的版本不一樣(2)修改php.ini文件,加載 php_memcache.dll (該文件就是封裝了一堆函數(shù));力口載 php_memcache.dll 文件extension=php_memcache.dll(3)重新啟動(dòng)apache(4)我們寫程序來完成 curd操作.細(xì)節(jié):在我們添加數(shù)據(jù)的時(shí)候,如果bool Memcache:add ( string $key , mixed $var , int $flag , int $expire )如果報(bào)expire設(shè)為0表示,永不過期.(只要mem

8、cache不重新啟動(dòng),就永遠(yuǎn)在 mem中)exprie直接給的是秒數(shù),則最大 30*3600*24如果你希望保持時(shí)間超過30 time()+天數(shù)*3600*24即可最后代碼:mem1.php<?php創(chuàng)建一個(gè)mem對象實(shí)例$mem=new Memcache;if(!$mem->connect("",11211)die('連接失敗!);增加/1.增加一個(gè)字串/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)echo 添加 ok'

9、*/2.添加數(shù)值/* if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)echo 添加 ok'*/3.添加數(shù)組在添加數(shù)組是,根據(jù)需要.希望序列號放入 ,/serialize<=>unserialize , 如果根據(jù)需要,也可以 json_encode <=> json_decode $arr=array("bj",'tj');if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*360

10、0*24)echo '添加數(shù)組 ok99111'/4.添加對象/* class Dogpublic $name;public $age;public function _construct($name,$age)$this->name=$name;$this->age=$age;$dog1=new Dog('小狗',50);if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)echo '添加對象ok'*/5.添加null布爾值/* if($mem->set(&#

11、39;key1',false,MEMCACHE_COMPRESSED,60)echo '添加布爾ok'*/6.資源類型放入./* $con=mysql_connect("","root","root");if(!$con)die('連接數(shù)據(jù)庫失敗');var_dump($con);echo "<br/>"if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)echo '添加資

12、源ok'*/查詢$val=$mem->get('key1');var_dump($val);修改可以使用replaceif($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60) echo 'replace ok'elseecho 'replace no ok'/刪除echo "<br/>"if($mem->delete('key14')echo 'key14 刪除';e

13、lseecho 'key14 不存在'mem2.php<?php這個(gè)文件去操作 memcached服務(wù)創(chuàng)建一個(gè)mem對象實(shí)例$mem=new Memcache;if(!$mem->connect("",11211)die('連接失敗!');在另外文件中取出對象時(shí),有個(gè)注意的地方,對應(yīng)php5.2這個(gè)版本會(huì)提示錯(cuò)誤/對php5.3這個(gè)版本會(huì)提示incomplete信息,解決方法是聲明類定義即可class Dogpublic $name;public $age;public function _construct($

14、name,$age)$this->name=$name;$this->age=$age;$dog=$mem->get('key1');var_dump($dog);test.php 說明 serilize 和 json_encode 用法:/什么時(shí)彳使用 serilize什么時(shí)候使用json_encode ajax配合<?phpclass Dogpublic Jname:public $age:public function construct($ namet $age)$this->name=3naine:$this->age=$age:)

15、$dog2 = new Dog ('小美14。):我方建也這個(gè)對象保存fl A. ->serilizefile put_contents(cl:/myJogserialize($dog2):echo 'save ok!;$dog=unserialize(fieget_contentsfrd:/myJogir):echo "<br/>T':echo $dog->name;$arr=arrayf cityr = >dhbjcityd = >d,tjf,):filc_put_contents(1'd:/my2 Jog11

16、json_encode($arr):練習(xí):請大家使用 php程序 memcache.dll完成對 memcahce增刪改查 20min如何使用PHP源碼來操作memcached服務(wù)如果管理員不讓我們?nèi)ゼ虞dmemcache.dll文件,我們可以直接通過源碼操作代碼 mem3.php<?phprequire_once 'memcached-client.php'$mc = new memcached(array('servers' => array(':11211'), / 連接的 memcacheip 和端口'

17、debug' => false, 是否 debug'compress_threshold' => 10240, /* 最大壓縮 */'persistant' => true); /* 是否是持久連接 */$mc->set('key1', array('some', 'array');/ $mc->replace('key', 'some random string');$val = $mc->get('key1');var_

18、dump($val);修改$mc->replace('key1',"北京");$val = $mc->get('key1');var_dump($val);刪除$mc->delete('key1');$val = $mc->get('key1');echo "刪除后"var_dump($val);Memcached機(jī)制的深入了解基于C后架構(gòu),協(xié)議簡單 c/s架構(gòu),此時(shí)memcached為服務(wù)器端,我們可以使用如 PHP, C/C+等程序連接m&mcached服

19、務(wù)器0 memcached的服務(wù)器客戶端通信并不使用XML等格式,而 使用簡單的基于文本行的協(xié)議。因此,通過telnet也能在 memcached上保存數(shù)據(jù)、取得數(shù)據(jù)基于libev6nt的事件處理 libevent是一套跨平臺(tái)的事件處理接口的封裝,能夠兼容包 括這些操作系統(tǒng):Windows/Linux/BSD/Solaris等操作系統(tǒng)的的事件處理, Memcached使用libevent來進(jìn)行網(wǎng)絡(luò)并發(fā)連接的處理,能夠 保持在很大并發(fā)情況下,仍舊能夠保持快速的響應(yīng)能力。,memcache的數(shù)據(jù)是放入到內(nèi)存,并且在數(shù)據(jù)爆滿的情況下,使用 LRU算法刪除基干客戶端的分布式 memcached盡管是吩

20、布式”緩存服務(wù)器,但服務(wù)器端并沒有 分布式功能由各個(gè)memcached不會(huì)互相通信以我拿信息口 那么,怎樣進(jìn)行分布式呢?這完全取決于客戶端的實(shí)現(xiàn)° 如圖:寫段代碼說明:mem4.php<?php我的 龜脂上疝兩個(gè)memshsd服務(wù).$ mem = new Memcache:$mem->addServer(127.0.0J'J1211);$mem->addServerf 127.0.0.T,9999):這里注意,杞key】政入刊11211蝶。的mem名是/9999端口的mem it不要我們賽*有$ mem好象本身推護(hù).if($mem->setfkeyr/

21、henoMEMCACHE_COMPRESSED300) echo add ok!':if($mem->setfkey2,hel(o2MEMCACHE_COMPRESSED300) echo add ok!"iffSmcmsetfkeyS'helloSMEMCACHECOMPRESSED.SOOJH echo add ok!'mem5.php 取出.<?php為何從多個(gè)mem中取出你的key?$mem = new Memcache:SmemaddServerfl 27-0.0 J1 J1211): $mem->addServer(112 7-0

22、.0.K9999):$val = $mem->get(,key1):echo '程序中取出分布的值= .$val;總結(jié):1 . mem服務(wù)的數(shù)據(jù)不是同步,數(shù)據(jù)是分布的2 .把什么數(shù)據(jù)放入到哪個(gè) memcached是由客戶端的 mem對象決定3 .當(dāng)執(zhí)行addServer的時(shí)候,并不是立即去連接 mem服務(wù),而是通過計(jì)算,hash后才去決 定連接哪個(gè)mem服務(wù),因此當(dāng)你大量加入服務(wù)器到連接池,沒有多余開銷memcache的細(xì)節(jié)討論生命周期從數(shù)據(jù)放入mem開始計(jì)時(shí),直到時(shí)間到了,就銷毀 ,如果時(shí)間為0,則表示不過期 memcache的數(shù)據(jù)被銷毀的情況如下:1 .時(shí)間至ij2 . 重啟

23、memcached服務(wù)3 .重啟memcached服務(wù)所在的機(jī)器4 . delete / flush 銷毀數(shù)據(jù)如何把session數(shù)據(jù)放入到 memcached服務(wù)中.步驟:1.修改php.ini的配置文件如下:;sesson.save_handler 有 user|files|memcachesession.save_handler = memcachesession.save_path = "tcp:/:11211"測試一把,重啟apache測試ok<?php/傳統(tǒng)的代碼session_start();$_SESSION'name'

24、;尸天龍八部 300'$_SESSION'city'尸beijing'class Dogpublic $name;)$dog1=new Dog;$dog1->name='abcde'$_SESSION'dog'=$dog1;如果session數(shù)據(jù)入 mem,那他一一定是以 session_id為/key值進(jìn)行添加取出$name=$_SESSION'name'echo "name=$name"echo "sessionid=".session_id();思考,如果管理員,不讓我們修改 php.ini文件,我們?nèi)绾翁幚韘ession入memcached 這個(gè)功能,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論