memcached軟體下載安裝教程
1、下載memcached軟體壓縮包,裡面有32位和64位兩個版本,選擇你系統對應版本。解壓放某個盤下面,比如在D:wampbin目錄下
memcached軟體下載:memcached.zip
2、在終端(CMD命令列)輸入以下命令下:
①輸入d:切換至D盤;
②輸入cd wampbin切換至D:wampbin目錄;
③輸入dir查看目前的目錄下是否有memcached軟體。
④輸入:
memcached.exe -d install 安裝
memcached.exe -d uninstall 卸載
memcached.exe -d stop 停止
memcached.exe -h 擷取所有協助
3、在啟動之後串連:
D:wampbin> telnet 127.0.0.1 11211 –串連memcache連接埠11211使用quit退出。
memcached伺服器CMD設定命令
啟動Memcache 常用參數
-p 設定連接埠號碼(預設不設定為: 11211)
-U UDP監聽連接埠(預設: 11211, 0 時關閉)
-l 綁定地址(預設:所有都允許,無論內外網或者本機更換IP,有安全隱患,若設定為127.0.0.1就只能本機訪問)
-d 獨立進程運行:
-d start 啟動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在啟動並執行memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 綁定使用指定用於運行進程
-m 允許最大記憶體用量,單位M (預設: 64 MB)
-P 將PID寫入檔案,可以使得後邊進行快速進程終止,需要與-d 一起使用
-M 記憶體耗盡時返回錯誤,而不是刪除項
-c 最大同時串連數,預設是1024
-f 塊大小增長因子,預設是1.25
-n 最小分配空間,key+value+flags預設是48
-h 顯示協助
Memcache的常用操作命令
• 5個常用的命令
– stats: 當前所有memcached伺服器啟動並執行狀態資訊
– add: 添加一個資料到伺服器
– set: 替換一個已經存在的資料,如果資料不存在,則和add命令相同。
– get: 從伺服器端提取指定的資料。
– delete: 刪除指定的單個資料,如果要清除所有資料,可以使用flush_all指令。
• Memcache的協議的錯誤部分主要是三個錯誤提示之提示指令:
– ERROR — 普通錯誤資訊,比如指令錯誤之類的
– CLIENT_ERROR <錯誤資訊> — 用戶端錯誤
– SERVER_ERROR <錯誤資訊> –伺服器端錯誤
資料管理命令
• 格式:<命令> <鍵> <標記> <有效期間> <資料長度>
其中:
– 命令:add(添加)、set(修改)、delete(刪除)、get(擷取)
– <鍵> -key,是發送過來指令的key內容
– <標記> – flags,是調用set指令儲存資料時候的flags標記
– 有效期間:是資料在伺服器上的有效期間限,如果是0,則資料永遠有效,單位是秒
– 資料的長度,block data 塊資料的長度,一般在這個個長度結束以後下一行跟著block data資料內容,
– 發送完資料以後,用戶端一般等待伺服器端的返回,伺服器端的返回:
– STORED 資料儲存成功
– NOT_STORED 資料儲存失敗,是因為伺服器端這個資料key已經存在
PHP的memcache功能擴充模組安裝
①把下載的php_memcache.dll檔案放在PHP的擴充庫目錄下(PHP程式EXT目錄下):
②在PHP.INI檔案中加入“extension=php_memcache.dll”這句話,開啟memcache.dll擴充庫:
③重啟appache服務。
使用phpinfo()函數查看memcache.dll是否安裝成功:
PHP操作MemCache類的方法
Memcache類
Memcache::add ———— 增加一個條目到快取服務器
Memcache::addServer ————向串連池中添加一個memcache伺服器
Memcache::close ————關閉memcache串連
Memcache::connect ————開啟一個memcached服務端串連
Memcache::decrement ————減小元素的值
Memcache::delete ————從服務端刪除一個元素
Memcache::flush ————清洗(刪除)已經儲存的所有的元素
Memcache::get ————從服務端檢回一個元素
Memcache::getExtendedStats ————快取服務器池中所有伺服器統計資訊
Memcache::getServerStatus ———— 擷取一個伺服器的線上/離線狀態
Memcache::getStats ———— 擷取伺服器統計資訊
Memcache::getVersion ———— 返回伺服器版本資訊
Memcache::increment ———— 增加一個元素的值
Memcache::pconnect ———— 開啟一個到伺服器的持久化串連
Memcache::replace ———— 替換已經存在的元素的值
Memcache::set ————Store data at the server
Memcache::setCompressThreshold —————開啟大值自動壓縮
Memcache::setServerParams ————運行時修改伺服器參數和狀態
Memcache 函數memcache_debug ———— 轉換調試輸出的開/關
MemCache的執行個體應用
代碼如下 |
複製代碼 |
<?php //1. 建立對象 $mem = newMemcache(); //2. 添加伺服器 $mem->addServer("192.168.150.250",11211); $mem->addServer("192.168.150.138",11211); $mem->addServer("192.168.112.128",11211); //3. 放置資訊 $mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0); $mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0); $mem->add("myob",newStu(),MEMCACHE_COMPRESSED,0); //4. 擷取資訊 echo $mem->get("mystr")."<br/>"; var_dump($mem->get('myarray')); echo "<br/>"; $mem->get("myob")->getinfo(); ?> MemCache的執行個體應用 <?php //建立memcache對象 $mem = new Memcache; //串連memcache伺服器 $mem -> connect("localhost", 11211); class Test { public $a=1; public $b=2; public $c=3; } $mem -> add("one", "this is memecache test!", MEMCACHE_COMPRESSED, time()+60*60*24*31); $mem -> add("two", array("111", "222", "3333"), MEMCACHE_COMPRESSED, 0); $mem -> add("three",new Test(), MEMCACHE_COMPRESSED, 0 ); $mem -> add("four", 100, MEMCACHE_COMPRESSED, 0); $mem -> set("five", "this is a demo!", MEMCACHE_COMPRESSED, 1000); var_dump($mem->get("one")); echo '<br>'; var_dump($mem->get("two")); echo '<br>'; var_dump($mem->get("three")); echo '<br>'; var_dump($mem->get("five")); echo '<br>'; var_dump($mem->get("four")); echo '<br>'; var_dump($mem->get(array("one", "five"))); echo '<br>'; $mem -> delete("one"); $mem -> delete("two", 0); $mem -> flush(); $mem -> close(); ?> |
memcached伺服器的安全防護
訪問mysql資料庫伺服器時必須通過使用者驗證後才能進入,而訪問memcached伺服器則是直接通過用戶端串連操作,沒有任何驗證過程。伺服器如果直接暴漏在互連網上是非常危險的,輕則資料泄漏,重則伺服器被入侵,還有可能存在一些未知的情況,所以危險性是可以預見的。為了安全起見,有以下兩種方法:
1.內網訪問
內網間的訪問能夠有效阻止其他非法的訪問。如果讓分布式的多個memcached伺服器只在內部區域網路中訪問,需要設定Web伺服器中的一塊網卡在內網訪問memcached伺服器,Web伺服器的另外一個網卡對外網。並在memcached伺服器啟動的時候就監聽內網的IP地址和連接埠,memcached的啟動選項使用如下所示:
memcached -d -m 1024 -u root –l 192.168.0.10 –p 11211 –c 1024 start
該命令設定memcached伺服器在啟動後監聽內網的IP地址192.168.0.10,監聽連接埠11211,佔用1024MB記憶體,並且允許最大1024個並發串連。
2.設定防火牆
設定防火牆是簡單有效方式,如果memcached和Web Server在同一台機器上,或只要是有通過外網IP來訪問memcached的情況就需要使用防火牆或者代理程式來過濾非法訪問。一般在Linux系統下常用iptables來指定一些規則防止一些非法的訪問。例如,設定只允許自己的Web伺服器來訪問我們的memcached伺服器,同時組織其他的訪問。防火牆iptables的規則設定如下所示:
iptables –F
iptables –P INPUT DROP
iptables –A INPUT –p tcp –s 192.168.0.10 –-dport 11211 –j ACCEPT
iptables –A INPUT –p udp –s 192.168.0.10 –-dport 11211 –j ACCEPT
上面的iptables規則只允許192.168.0.10這台Web伺服器對memcached伺服器的訪問,能夠阻止一些非法訪問。當然也可以增加一些其他的規則來加強安全性,需要根據自己的需要來進行設定。
memcache執行個體應用——快取資料庫資料
在項目中最常見的MemCache應用,就是緩衝從資料庫中查詢的資料結果,以及儲存會話控制資訊(session)。將資料庫查詢出來的結果使用memcached伺服器進行緩衝,以減少頻繁的資料庫連接及大量的查詢對資料庫造成的壓力。設計的原則是只要資料庫中的記錄沒有被改變,就不需要重新串連資料庫並反覆執行重複的查詢語句,相同的查詢結果都應該從快取服務器中擷取。memcache樣本如下所示:
代碼如下 |
複製代碼 |
<?php //建立memcache對象 $mem = new Memcache; //串連memcache伺服器 $mem -> addServer("localhost", 11211); $mem -> addServer("192.168.1.137", 11211); //資料庫的串連和操作 $sql = "select id, name, pass, age, sex, email from users order by id"; $key=md5($sql); //直接從記憶體memcahce要資料 $data = $mem->get($key); //如果用資料就從內容中返回資料, 如果沒有才串連資料庫,執行SQL語句 if(empty($data)) { //串連 try { $pdo = new PDO("mysql:host=localhost;dbname=xsphp", "root", "123456"); }catch(PDOException $e) { echo "資料庫連接失敗:".$e->getMessage(); } //擷取資料,執行查詢語句 $stmt = $pdo -> prepare($sql); $stmt -> execute(); $data = $stmt -> fetchAll(PDO::FETCH_ASSOC); $mem -> set($key, $data, MEMCACHE_COMPRESSED, 10); echo "這是第一次訪問從資料庫擷取的資料並放到了記憶體中!<br>"; } echo '<pre>'; print_r($data); echo '</pre>'; //關閉串連 $mem -> close(); ?> |