**Memcache介紹:**Memcache是一套分佈式緩存系統,分佈式就是說能夠在多臺服務器上同時安裝Memcache服務,這樣能夠達到很好的集羣效果。高速,是由於Memcache數據都是維護在內存中的,它的讀取速度比存儲在硬盤中的數據的讀取速度要快不少。
做用:當咱們的應用訪問量比較大的時候,數據庫的壓力也會特別大,Memcache能夠在應用和數據庫之間增長一個緩衝層,就是咱們以前從數據庫中已經讀取到的數據,咱們第二次或者是接下來再讀取的時候,就能夠直接訪問Memcache去讀取這些數據,從而減輕Mysql等等數據庫的壓力
怎樣理Memcache:其實能夠理解成,它是一個只有一張表的數據庫,這張表有兩個字段,分別是key和value,value是保存的數據,key就是這個數據的ID,用來保證查找時的惟一性
使用場景:
(1)非持久化存儲:對數據存儲要求不高,也就是說,若是這份數據丟失,也不會對系統形成太大的影響,由於當系統斷電或被重啓後內存會被清空掉,那麼以前保存在Memcache中的數據也會被清空掉。因此要把Memcache看成緩存使用,而不要當成真正的數據庫
(2)分佈式存儲:不適合單機使用,由於Memcache對內存的消耗很大,若是使用Memcache,推薦將其安裝在另一臺機器上單獨做爲緩存系統,而不要把Memcache和數據庫都裝到一臺機器。
(3)Key/Value存儲:格式簡單,不支持List、Array數據格式php
Memcached和Memcache是兩個版本,推薦Memcached,它有更多的改進和功能函數,是Memcache的升級版本,速度和穩定性都比較高sql
安裝Memcached
1,Memcache服務端的安裝
(1)編譯安裝,Libevent Memcache
先安裝Libevent這個擴展,編譯安裝的好處就是能夠在安裝的過程進行一些自定義的設置,好比指定軟件安裝在哪兒,好比編譯安裝過程出現了哪些錯誤,而對Linux瞭解不是特別多的狀況下,你可能處理錯誤的時候就會相對困難
(2)使用依賴管理工具yum、apt-get進行安裝數據庫
實際安裝:(操做系統是64位的Centos)
若是要編譯安裝,須要將安裝包提早下載下來libevent、memcached
這裏使用依賴管理工具安裝緩存
#yum install memcached
啓動memcached服務器
#/usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root/* -d:守護進程的模式啓動。守護進程就是,當你從終端窗口推出以後,程序依然進行 -l:指定IP地址 -p:指定端口號 -m:爲memcached分配多少內存,這裏是以M爲單位 -u:以哪一個身份去啓動memcached(線上的時候最好不要用超級管理員用戶)*/
可使用ps查看memcached進程是否啓動分佈式
#ps -ef | grep memcached
2,Memcache客戶端的安裝
1,安裝前置擴展Libmemcached
下載好libmemcached和memcached,對libmemcached進行解壓
這裏使用編譯安裝,進入解壓出來的文件夾
執行memcached
#./configure --prefix=/usr/lib/libmemcached而後執行#make && makeinstall
2,爲php安裝memcached擴展
解壓memcached,進入到解壓目錄當中
使用phpize的方式安裝memcached擴展函數
#phpize此時就會作出一個configure的文件#./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached-sasl後邊是指定php的配置文件和剛安裝的libmemcached的位置,你們根據本身的配置文件路徑進行填寫#make#make install執行完make install以後,咱們會看見一個擴展目錄,將該路徑添加到php配置文件中 php.ini中加入 extension=memcached.so 而後重啓服務器環境,查看php擴展#php -m | grep memecached
在PHP中使用memcached
系統類:addServer、addServers、getStats、getVersion
數據類:add、set、delete、flush、replace、increment、get
進階類:setMulti、deleteMulti、getMulti、getResultCode、getResultMessage
更多關於memecached的操做,能夠到php官網查看(php.net)工具
test.php<?php/*系統類*/$m = new Memcached();/*添加服務器*/$m->addServer('127.0.0.1', 11211);/*添加多臺服務器*/$array = array( array('127.0.0.1', 11211), array('127.0.0.1', 11211) );$m->addServers($array);/*查看服務器狀態*/print_r($m->getStats());/*查看服務端版本號*/print_r($m->getVersion());/*數據類*/$m->add('mkey', 'mvalue', 0);//第三個參數是數據存在的時間,0表示永久echo $m->get('mkey');//獲取數據/*假設對同一個key值進行兩次添加的話,後邊的操做不會覆蓋前邊的value,若是想替換掉,就使用replace*/$m->replace('mkey', 'mvalue2');/*還可使用set方法表添加數據,它的好處就是,當咱們的數據不存在時會幫咱們新建數據,若是存在,就會覆蓋原值*/$m->add('mkey', 'mvalue', 600);/*刪除數據*/$m->delete('mkey');/*清空memcache中的全部緩存*/$m->flush();/*對memcache中整形數據進行+1或+任意數值的操做*/$m->set('num', 5, 0);$m->increment('num', 5);//每次刷新頁面,num自增5$m->get('num');/*自減decrement用法相同*//*下邊的方法只支持Memcached,不支持Memcache*//*一次添加多條數據*///原始方法,屢次使用set()//如今可使用setMulti()$data = array( 'key' => 'value', 'key1'=> 'value1');$m->setMulti($data,0);$result = $m->getMulti(array('key','key1'));//獲取多條數據print_r($result);//刪除多條數據$m->deleteMulti(array('key','key1'));//返回上一次操做返回的編碼(數字的形式存在) 能夠到手冊中查看每個編碼的含義 echo $m->getResultCode();//好比 成功 返回0//獲取操做結果echo $m->getResultMessage();//好比 成功 返回SUCCESS
封裝一個本身的Memcache類網站
Memcached.class.php<?php/* 封裝本身的Memcached類 1,擴展性 2,可調性 3,儘可能簡便的操做,一個方法多種功能 *//* 經過一個s()方法實現set()、get()、delete()操做 set s($key,$value,$time) get s($key) delete s($key,NULL) */class Mem { private $type = 'Memcached';//考慮到擴展性,實例化的多是Memcache也多是Memcached private $m; private $time = 0; private $error; private $debug = 'true'; public function __construct() { if(!class_exists($this->type)){ $this->error="No ".$this->type; return false; }else{ $this->m=new $this->type; } } //添加服務器 public function addServer($arr) { $this->m->addServers($arr); } public function s($key, $value='', $time=NULL) { $number = func_num_args();//該函數用來判斷傳遞過來了幾個參數 if($number == 1){ return $this->get($key); }else if($number >= 2){ if($value === NULL){//必定要使用「全等於」,由於若是不是全等於,傳遞過來0也會經過 $this->delete($key); }else{ $this->set($key, $value, $time); } } } private function set($key, $value, $time=NULL) { if($time === NULL) $time = $this->time(); $this->m->set($key, $value, $time); if($this->debug){ if($this->m->getResultCode() != 0){ return false; } } } private function get($key){ $result = $this->m->get($key); if($this->debug){ if($this->m->getResultCode() != 0){ return false; } } return $result; } private function delete($key) { $this->m->delete($key); } public function getError() { if($this->error){ return $this->error(); }else{ return $this->m->getResultMessage(); } } }
項目中使用Memcache
1,即時生成緩存
比較適用於相似於新聞詳情頁,第一我的進入頁面時,生成緩存,當後邊的人再進入這個頁面時,能夠直接從緩存中獲取數據,而且能夠給數據設置一個過時時間,這樣的話,等看這個新聞的人比較少的時候就能夠及時清除緩存,這樣能夠達到節約內存的目的
2,提早生成緩存
這種生成緩存的方式,比較適用於訪問量比較大且數據量比較多,相似於網站首頁這種狀況。可使用定時腳本的方式,提早將緩存生成
3,永久緩存
這種緩存方案比較適合於關於單獨的頁面,它的修改頻率很是低,這時能夠生成永久緩存
**Memcache介紹:**Memcache是一套分佈式緩存系統,分佈式就是說能夠在多臺服務器上同時安裝Memcache服務,這樣能夠達到很好的集羣效果。高速,是由於Memcache數據都是維護在內存中的,它的讀取速度比存儲在硬盤中的數據的讀取速度要快不少。
做用:當咱們的應用訪問量比較大的時候,數據庫的壓力也會特別大,Memcache能夠在應用和數據庫之間增長一個緩衝層,就是咱們以前從數據庫中已經讀取到的數據,咱們第二次或者是接下來再讀取的時候,就能夠直接訪問Memcache去讀取這些數據,從而減輕Mysql等等數據庫的壓力
怎樣理Memcache:其實能夠理解成,它是一個只有一張表的數據庫,這張表有兩個字段,分別是key和value,value是保存的數據,key就是這個數據的ID,用來保證查找時的惟一性
使用場景:
(1)非持久化存儲:對數據存儲要求不高,也就是說,若是這份數據丟失,也不會對系統形成太大的影響,由於當系統斷電或被重啓後內存會被清空掉,那麼以前保存在Memcache中的數據也會被清空掉。因此要把Memcache看成緩存使用,而不要當成真正的數據庫
(2)分佈式存儲:不適合單機使用,由於Memcache對內存的消耗很大,若是使用Memcache,推薦將其安裝在另一臺機器上單獨做爲緩存系統,而不要把Memcache和數據庫都裝到一臺機器。
(3)Key/Value存儲:格式簡單,不支持List、Array數據格式
Memcached和Memcache是兩個版本,推薦Memcached,它有更多的改進和功能函數,是Memcache的升級版本,速度和穩定性都比較高
安裝Memcached
1,Memcache服務端的安裝
(1)編譯安裝,Libevent Memcache
先安裝Libevent這個擴展,編譯安裝的好處就是能夠在安裝的過程進行一些自定義的設置,好比指定軟件安裝在哪兒,好比編譯安裝過程出現了哪些錯誤,而對Linux瞭解不是特別多的狀況下,你可能處理錯誤的時候就會相對困難
(2)使用依賴管理工具yum、apt-get進行安裝
實際安裝:(操做系統是64位的Centos)
若是要編譯安裝,須要將安裝包提早下載下來libevent、memcached
這裏使用依賴管理工具安裝
#yum install memcached
啓動memcached
#/usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root/* -d:守護進程的模式啓動。守護進程就是,當你從終端窗口推出以後,程序依然進行 -l:指定IP地址 -p:指定端口號 -m:爲memcached分配多少內存,這裏是以M爲單位 -u:以哪一個身份去啓動memcached(線上的時候最好不要用超級管理員用戶)*/
可使用ps查看memcached進程是否啓動
#ps -ef | grep memcached
2,Memcache客戶端的安裝
1,安裝前置擴展Libmemcached
下載好libmemcached和memcached,對libmemcached進行解壓
這裏使用編譯安裝,進入解壓出來的文件夾
執行
#./configure --prefix=/usr/lib/libmemcached而後執行#make && makeinstall
2,爲php安裝memcached擴展
解壓memcached,進入到解壓目錄當中
使用phpize的方式安裝memcached擴展
#phpize此時就會作出一個configure的文件#./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached-sasl後邊是指定php的配置文件和剛安裝的libmemcached的位置,你們根據本身的配置文件路徑進行填寫#make#make install執行完make install以後,咱們會看見一個擴展目錄,將該路徑添加到php配置文件中 php.ini中加入 extension=memcached.so 而後重啓服務器環境,查看php擴展#php -m | grep memecached
在PHP中使用memcached
系統類:addServer、addServers、getStats、getVersion
數據類:add、set、delete、flush、replace、increment、get
進階類:setMulti、deleteMulti、getMulti、getResultCode、getResultMessage
更多關於memecached的操做,能夠到php官網查看(php.net)
test.php<?php/*系統類*/$m = new Memcached();/*添加服務器*/$m->addServer('127.0.0.1', 11211);/*添加多臺服務器*/$array = array( array('127.0.0.1', 11211), array('127.0.0.1', 11211) );$m->addServers($array);/*查看服務器狀態*/print_r($m->getStats());/*查看服務端版本號*/print_r($m->getVersion());/*數據類*/$m->add('mkey', 'mvalue', 0);//第三個參數是數據存在的時間,0表示永久echo $m->get('mkey');//獲取數據/*假設對同一個key值進行兩次添加的話,後邊的操做不會覆蓋前邊的value,若是想替換掉,就使用replace*/$m->replace('mkey', 'mvalue2');/*還可使用set方法表添加數據,它的好處就是,當咱們的數據不存在時會幫咱們新建數據,若是存在,就會覆蓋原值*/$m->add('mkey', 'mvalue', 600);/*刪除數據*/$m->delete('mkey');/*清空memcache中的全部緩存*/$m->flush();/*對memcache中整形數據進行+1或+任意數值的操做*/$m->set('num', 5, 0);$m->increment('num', 5);//每次刷新頁面,num自增5$m->get('num');/*自減decrement用法相同*//*下邊的方法只支持Memcached,不支持Memcache*//*一次添加多條數據*///原始方法,屢次使用set()//如今可使用setMulti()$data = array( 'key' => 'value', 'key1'=> 'value1');$m->setMulti($data,0);$result = $m->getMulti(array('key','key1'));//獲取多條數據print_r($result);//刪除多條數據$m->deleteMulti(array('key','key1'));//返回上一次操做返回的編碼(數字的形式存在) 能夠到手冊中查看每個編碼的含義 echo $m->getResultCode();//好比 成功 返回0//獲取操做結果echo $m->getResultMessage();//好比 成功 返回SUCCESS
封裝一個本身的Memcache類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
項目中使用Memcache
1,即時生成緩存
比較適用於相似於新聞詳情頁,第一我的進入頁面時,生成緩存,當後邊的人再進入這個頁面時,能夠直接從緩存中獲取數據,而且能夠給數據設置一個過時時間,這樣的話,等看這個新聞的人比較少的時候就能夠及時清除緩存,這樣能夠達到節約內存的目的
2,提早生成緩存
這種生成緩存的方式,比較適用於訪問量比較大且數據量比較多,相似於網站首頁這種狀況。可使用定時腳本的方式,提早將緩存生成
3,永久緩存 這種緩存方案比較適合於關於單獨的頁面,它的修改頻率很是低,這時能夠生成永久緩存