本文轉載http://blog.csdn.net/zhihua_w 不錯的博客,僅供本人學習之用
一般來說,如果並發量不大的情況,使不使用緩存技術並沒有什么影響,但如果高並發的情況,使用緩存技術就顯得很重要了,可以很好的減輕數據庫和服務器的壓力,當然解決高並發的技術有很多,這里只是以緩存的角度來說明使用memcache的便捷性和方便性,使用memcache的前提是需要在服務端先配置好memcahche的環境(上篇文章已經講述過了)!確認memcahce可以正常連接之后就可以在程序使用了!
1、PHP中Memcahce的所有方法總結
Memcache函數 所有的方法列表如下:
- Memcache::add – 添加一個值,如果已經存在,則返回false
- Memcache::addServer – 添加一個可供使用的服務器地址
- Memcache::close – 關閉一個Memcache對象
- Memcache::connect – 創建一個Memcache對象
- memcache_debug – 控制調試功能
- Memcache::decrement – 對保存的某個key中的值進行減法操作
- Memcache::delete – 刪除一個key值
- Memcache::flush – 清除所有緩存的數據
- Memcache::get – 獲取一個key值
- Memcache::getExtendedStats – 獲取進程池中所有進程的運行系統統計
- Memcache::getServerStatus – 獲取運行服務器的參數
- Memcache::getStats – 返回服務器的一些運行統計信息
- Memcache::getVersion – 返回運行的Memcache的版本信息
- Memcache::increment – 對保存的某個key中的值進行加法操作
- Memcache::pconnect – 創建一個Memcache的持久連接對象
- Memcache::replace -對一個已有的key進行覆寫操作
- Memcache::set – 添加一個值,如果已經存在,則覆寫
- Memcache::setCompressThreshold – 對大於某一大小的數據進行壓縮
- Memcache::setServerParams – 在運行時修改服務器的參數
PHP雖然己經做到很好很快了,但是如果大數據量時還是會有些卡了,這里介紹一下PHP中使用Memcache緩存技術提高響應速度方法,有需要了解的朋友可參考。
Memcache既可以在Linux下使用,也可以在Windows系統下使用,當然首推linux系統,至於如何安裝Memcache,Google一下就什么都出來了,博主也有一篇在Windows平台下安裝Memcache的教程博文,有興趣的可以看一下。
2、使用Memcache的提高響應速度
① 例子1 - 代碼如下:
- <?php
- //連接Memcache
- $mem = new Memcache;
- $mem->connect("127.0.0.1", 11211) or die ("Could not connect");
- //此函數可以顯示Memecache的版本
- $version = $mem->getVersion();
- echo "Memcached Server version: " . $version . "<br>";
- //保存數據數據到Memcache緩存,參數60表示寫入緩存數據的失效時間(單位是秒)
- $mem->set('key1', 'This is first value', 0, 60);
- $val = $mem->get('key1');
- echo "Get key1 value: " . $val . "<br>";
- //替換數據
- $mem->replace('key1', 'This is replace value', 0, 60);
- $val = $mem->get('key1');
- echo "Get key1 value: " . $val . "<br>";
- //保存數組數據
- $arr = array('aaa', 'bbb', 'ccc', 'ddd');
- $mem->set('key2', $arr, 0, 60);
- $val2 = $mem->get('key2');
- echo "Get key2 value: ";
- print_r($val2);
- echo "<br>";
- //刪除保存的緩存數據
- $mem->delete('key1');
- $val = $mem->get('key1');
- echo "Get key1 value: " . $val . "<br>";
- //清除所有緩存數據
- $mem->flush();
- $val2 = $mem->get('key2');
- echo "Get key2 value: ";
- print_r($val2);
- echo "<br>";
- //關閉Memcache連接
- $mem->close();
- ?>
初始化一個Memcache的對象:$mem = new Memcache;連接到我們的Memcache服務器端,第一個參數是服務器的IP地址,也可以是主機名,第二個參數是Memcache的開放的端口:$mem->connect("127.0.0.1", 11211);保存一個數據到Memcache服務器上,第一個參數是數據的key,用來定位一個數據,第二個參數是需要保存的數據內容,這里是一個字符串,第三個參數是一個標記,一般設置為0或者MEMCACHE_COMPRESSED就行了,第四個參數是數據的有效期,就是說數據在這個時間內是有效的,如果過去這個時間,那么會被Memcache服務器端清除掉這個數據,單位是秒,如果設置為0,則是永遠有效,我們這里設置了60,就是一分鍾有效時間:$mem->set(‘key1‘, ‘This is first value', 0, 60);從Memcache服務器端獲取一條數據,它只有一個參數,就是需要獲取數據的key,我們這里是上一步設置的key1,現在獲取這個數據后輸出輸出;然后是使用replace方法來替換掉上面key1的值,replace方法的參數跟set是一樣的,不過第一個參數key1是必須是要替換數據內容的key,最后輸出了;同樣的,Memcache也是可以保存數組的,下面是在Memcache上面保存了一個數組,然后獲取回來並輸出;然后刪除一個數據,使用delte接口,參數就是一個key,然后就能夠把Memcache服務器這個key的數據刪除,最后輸出的時候沒有結果;最后我們把所有的保存在Memcache服務器上的數據都清除,會發現數據都沒有了,最后輸出key2的數據為空,最后關閉連接。
② 例子2 - 代碼如下:
希望上述的demo代碼對大家的PHP開發有所幫助。
- <?php
- //使用Memcache緩存,進行連接
- $mc = memcache_connect('localhost', 11211);
- $pn = $mc->get('pid');
- echo $pn;
- if ($pn < 1)
- $pn = 1;
- else
- $pn++;
- //設置緩存數據永不過期
- $mc->set('pid', $pn, 0, 0);
- //關閉Memecahe連接
- memcache_close($mc);
- ?>
3、其他的關於Memecache
① Memcache和Memcached的區別
為什么會有Memcache和Memcached兩種名稱?其實Memcache是這個項目的名稱,而Memcached是它服務器端的主程序文件名,知道它們所包含的意思了吧。一個是項目名稱,一個是主程序文件名,在網上看到了很多人不明白,於是混用了。
② Memcache的服務器端和客戶端安裝
分為兩個過程:Memcache服務器端的安裝和Memcached客戶端的安裝。
所謂服務器端的安裝就是在服務器(一般都是linux系統)上安裝Memcache實現數據的存儲。
所謂客戶端的安裝就是指PHP(或者其他程序,Memcache還有其他不錯的api接口提供)去使用服務器端的Memcache提供的函數,需要PHP添加擴展。
③ 什么時候使用Memcache和Memcache的使用環境
使用Memcache的網站一般流量都是比較大的,為了緩解數據庫的壓力,讓Memcache作為一個緩存區域,把部分信息保存在內存中,在前端能夠迅速的進行存取。那么一般的焦點就是集中在如何分擔數據庫壓力和進行分布式,畢竟單台Memcache的內存容量的有限的。我這里簡單提出我的個人看法,未經實踐,權當參考。