總結
源碼編譯方式的軟體安裝三部曲:
1、下載下傳(找官網)、解壓、進入解壓後的目錄
2、編譯參數
3、make && make install安裝
php擴充安裝舞步曲:
1、下載下傳(找pecl)、解壓、進入解壓後的目錄
2、使用php自帶的二進制腳本phpize弄成可編譯的
3、編譯參數
4、make && make install安裝
5、将擴充添加到php.ini中,重新開機php,看php -m中是否添加成功
redis和memcache的差別: 1、memcache重新開機後資料丢失
2、redis不會,redis持久化
memcache
什麼是memcache:
分布式高速緩存系統。可以在多台伺服器安裝就是分布式,可以在達到很好的叢集效果
是應用和資料庫中間的緩沖層:第1次走資料庫,然後存到memcache中,之後就從memcache讀取(當然會涉及到是否過期等問題)
我的了解:memcache是一張隻有2個字段的表。Key(id)和value(值)字段
在什麼時候使用memcache:
1、非持久化存儲:對資料存儲要求不高(斷電或伺服器重新開機會給記憶體清空)
2、分布式存儲:不适合單機使用(因為很吃記憶體,非要單機的話,專門找個伺服器做memcache。不要将資料庫和memcahe裝在同一台伺服器)
3、key/value存儲:格式簡單、不支援list、array等資料格式
知道怎樣使用memcache優化網站或api:
定期檢視緩存的分布情況和擊中情況,根據查詢結果進行優化
項目中使用memcache:
1、既時生成緩存适用于:新聞、詳情頁等靜态資源頁。第1個使用者進來的時候生成緩存,在進來的n個人就直接走緩存。設定個時間,當過了1星期,可以直接在緩存中删除
2、提前生成緩存适用于:首頁。通路量較大,資料量又比較多的情況。使用linux定時腳本的方式提前生成緩存
3、永久緩存适用于:關于我們,這種單獨的頁面,修改頻率相當低,隻有當修改了,才從新生成緩存
使用memcache的思路:
以及時生成緩存為例:
思路:先查詢memcache中有沒有對應的緩存(就是判斷屬性中有無)。
有就傳回。
沒有就查詢,查詢的時候設定一份存到屬性中。
每次新增資料成功以後,删掉舊的緩存
安裝:
我的環境是阿裡雲ecs,centos7.2的,裝的一鍵lnmp
安裝服務端
官網: http://memcached.org/
wget http://www.memcached.org/files/memcached-1.5.5.tar.gz //1、下載下傳
tar xf memcached-1.5.5.tar.gz //2、解壓
cd memcached-1.5.5 //切換進入解壓目錄
yum install libevent-devel -y //安裝依賴
./configure --prefix=/usr/local/Memcached //3、編譯參數
make && make install //4、安裝
啟動:
注意:memcache沒有配置檔案,是以要在啟動中輸入
./memcached -u root -p 11211 -P /var/run/memcached.pid -d #此啟動所有的ip都可以連接配接
/usr/local/Memcached/bin/memcached -u root -p 11211 -P /var/run/memcached.pid -l ip -d
-u 指定運作使用者(線上最好不要經常使用root)
-p運作端口(小寫),最好是1024以上的端口
-P pid檔案(大寫)
-d 守護程序 daemon 運作
-l memcache伺服器的内網ip才可登陸,指定一個ip(用本機)
-m 為memcache配置設定多少記憶體,機關兆(配置低分150)
-c是最大運作的并發連接配接數,預設是1024;
連接配接測試:
telnet 127.0.0.1 11211 #ip輸入 上面-l的參數
set key 0 0 5 //存資料
hello
get key //取資料
quit #退出telnet
注意:重新開機後memcached資料丢失
安裝擴充
http://pecl.php.net 擴充都在這裡下載下傳
memcache | memcached extension |
memcached | PHP extension for interfacing with memcached via libmemcached library |
第1個是完全在PHP架構内開發的memcache(php手冊中的)
第2個是使用libmemcached的memecached(推薦用這個,性能更好)
wget http://pecl.php.net/get/memcached-3.0.0.tgz //1、下載下傳
tar xf memcached-3.0.0.tgz //解壓
cd memcached-3.0.0 //切換進解壓後的目錄
/usr/local/php/bin/phpize //2、二進制腳本工具,使用這工具後就可以編譯參數了
yum install libmemcached-devel –y //安裝依賴
./configure --with-php-config=/usr/local/php/bin/php-config //3、編譯參數
make && make install //4、安裝
配置 php.ini
extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/ #所有擴充基本都在這個目錄下,這個目錄引入一次即可
extension = memcached.so //5、将擴充添加到配置檔案中
結果:
重新開機伺服器
輸入php -m 檢視擴充
memcache類的操作和封裝
注意:php中有2個memcache類,我用的memcached類
主要分為2大類:1、系統類 2、資料類
1、系統類
因為這個伺服器是不存在的
2、資料類
3、優雅快速的使用memcache
4、封裝自己類的總結
1、擴充性 2、可調試 3、盡量簡便的操作,一個方法多種功能(用swtich判斷,調不同的方法)
<?php
/**
* 封裝自己的memcache類
* 封裝的目的是為了切換緩存引擎, 比如改用redis, 開發中使用的類調用的方法名一樣,但是内部實作調用的是不同的引擎(工廠模式的思想)。
*/
class Mem{
private $type = 'Memcached';
private $m; //執行個體化的對象
private $time = 0; //緩存時間
private $error; //錯誤
private $debug = 'true';
public function __construct()
{
if(!class_exists($this->type)){
$this->error = $this->type.'類不存在';
return false;
}else{
$this->m = new $this->type;
}
}
/**
* 添加多台伺服器
* @param $arr 是個二維數組
*/
public function ads($arr){
$this->m->addServers($arr);
//如果傳回結果是一個對象,并且對象某個屬性的值還對,就是添加成功
}
/**
* 思想:傳不同的參數,調用同一個方法,實作不同的功能
* @param $key
* @param $value
* @param $time
*/
public function s($key,$value='',$time=null){
//傳過來的參數是1個,那就是get方法
if(func_num_args() == 1){
//注意:這裡不用$this->debug,是因為預設為true直接就進if然後return了,然後下面就不會執行了,是以他列印不出來
return $this->m->get($key); //【查】
//注意:加這也沒效果,上面有return也是直接傳回了。不知道老師是get方法中加debug是啥意思??
} else if(func_num_args() >= 2){
if($value === null){
$this->m->delete($key); //【删】
}else{
if($time === null){
$time = $this->time; //用屬性中緩存的時間
}
$this->m->set($key,$value,$time); //【加】
return $this->debug(); //注意:這到無所謂,頂多上面執行完咯,有錯誤傳回錯誤。但也要調用s方法得時候用echo輸出下
}
}
}
private function debug(){
//開啟調試模式才傳回錯誤資訊
if($this->debug){
if($this->m->getResultCode() != 0){
return $this->m->getResultMessage(); //直接傳回錯誤資訊
}
}
}
/**
* 錯誤處理的方法
*/
public function getError(){
if($this->error){
return $this->error;
}else{
return $this->m->getResultMessage();
}
}
}
調用方法:用浏覽器通路,友善看
<?php
/**
* 調用自己封裝的memcache類
* 封裝的目的是為了切換緩存引擎, 比如改用redis, 開發中使用的類一樣,但是内部實作調用的是不同的引擎。
*/
//思想:傳不同的參數,調用同一個方法,實作不同的功能
include 'Mem.php';
$obj = new Mem();
$obj->ads([['127.0.0.1',11211]]); //添加伺服器
$obj->s('h1','yangxi',0); //傳3個參數是set【設定】
//$obj->s('h1',null); //傳2個參數是delete【删除】
echo $tmp = $obj->s('h1'); //傳1個參數是get【擷取】
echo "<br />";
echo $obj->getError(); //擷取錯誤