<?php /** * Memcached(記憶體緩衝) * 高效能分布式記憶體對象緩衝系統(通過記憶體維護一個巨大的hash表(key=>value)) * 記憶體維護軟體(減少IO 150k 開源) * http://localhost:11211 * * memcached基於libevent事件庫 * linux: * 1.安裝libevent * 2.安裝memcached並指定libevent的位置 * 3.使用: * 啟動:memcached -d -m 128 -l 192.168.0.1 -p 11211 -u root * 停止:kill cat /tmp/memcached.pid * killall memcached * windows: * 使用編譯完成的軟體 * 1.安裝到系統服務中: * 在doc中:執行此軟體 memcached.exe -d install(如果提示錯誤,要找到cmd.exe用管理員身份開啟) *2.卸載: * 在doc中:執行此軟體 memcached.exe -d uninstall * 3.啟動服務:(預設ip是本機,連接埠是11211) * memcached.exe -d start * memcached.exe -d -m 128 -l 127.0.0.1 -p 11211 start 指定參數 * 配置參數: * -p 監聽連接埠 * -l 連結的ip地址,預設是本機 * -d start 啟動memcached服務 * -d restart 重啟memcached服務 * -d stop|shutdown 關閉正在啟動並執行memcached服務 * -d install 安裝memcached服務 * -d uninstall 卸載memcached服務 * -u 以什麼身份運行(僅在以root啟動並執行時候有效) * -m 最大使用記憶體,單位是MB,預設是64MB,最大應該是2G * -M 記憶體耗盡時返回錯誤,而不是刪除項 * -c 最大同時串連數,預設是1024 * -f 塊大小增長因子,預設是1.25 * -n 最小分配空間,key+value+float 預設是48 * -h 顯示協助 * * 操作memcached(命令方式telnet作為用戶端) * telnet localhost 11211 ---memcached * * php配置memcached檔案:在ext中加入:php_memcache.dll(對於的版本要正確) * 並修改php.ini擴充 * extension=php_memcache.dll * [Memcache] * memcache.allow_failover = 1 * memcache.max_failover_attempts=20 * memcache.chunk_size =8192 * memcache.default_port = 11211 * * Memcache物件導向的常用介面包括: * Memcache::connect 開啟一個到memcache的連結 * Memcache::pconnect開啟一個到memcache的長串連 * Memcache::close關閉一個Memcache的連結 * Memcache::set儲存資料到memcache的伺服器 * Memcache::add添加資料到memcache的伺服器 * Memcache::get提取一個已儲存在memcache的伺服器資料 * Memcache::replace替換一個已經存在memcache伺服器上的項目(功能類似memcache::set) * Memcache::delete從Memcache伺服器上刪除一個儲存的項目 * Memcache::flush重新整理所以Memcache伺服器上儲存的項目(類似於刪除所有) * Memcache::getStats擷取當前memcache伺服器啟動並執行狀態 * Memcache::addServer分布式伺服器添加一個伺服器 * * * 何時何處使用memcache * 一、資料庫讀出來的資料(select)使用memcache處理 * 二、在會話控制session中使用 * * memcache的安全建議: * 1.內網訪問: * memcached -d -u root -l 192.168.0.111 -p 11211 * 2.設定防火牆: * iptables -A INPUT -p tcp -s 192.168.1.111 -dport 11211 -j ACCEPT * iptables -A INPUT -p udp -s 192.168.1.111 -dport 11211 -j ACCEPT * *///調用memcache的測試的方法//memcacheTest();//調用儲存查詢語句的方法memcacheSQL();/** * 查詢資料庫 * 緩衝查詢的資料放入memcache中 * 注意: * 1.同一個項目的安裝兩次,key要有不同的首碼 * 2.sql語句可以作為緩衝的下標(防止sql暴漏?) */function memcacheSQL(){//連結資料庫儲存select查詢語句//建立Memcache服務物件$mem = new Memcache;$mem->connect("localhost",11211);$sql = "select * from users where id <12";$key = md5($sql);$data = $mem->get($key);if (!$data) {$mysql = new mysqli("localhost","root","root","hibernate");$result = $mysql->query($sql);$data = array();while ($row = $result->fetch_assoc()){$data[]=$row;}$result->free();$mysql->close();$mem->set($key,$data,MEMCACHE_COMPRESSED,60);echo $sql;}echo "<pre>";print_r($data);echo "</pre>";$mem->close();}/** * memcache伺服器 * 資料測試 */function memcacheTest(){//建立Memcache服務物件$mem = new Memcache;$mem->connect("localhost",11211);//添加多伺服器//$mem->addServer("www.sid.com",11221);//$mem->addServer("192.167.1.112",11211);//添加$mem->add("mystr","this is a memcache test!",MEMCACHE_COMPRESSED,60);//修改$mem->set("mystr","this is a update memcache test!",MEMCACHE_COMPRESSED,60);//擷取$str = $mem->get("mystr");echo $str."<br>";//添加數組$mem->add("myarr",array("asdfsa","sdfsdf"),MEMCACHE_COMPRESSED,60);//擷取$str = $mem->get("myarr");echo $str."<br>";//添加對象class Per{var $name = "san";var $age=12;}$mem->add("myper",new Per,MEMCACHE_COMPRESSED,60);//擷取$str = $mem->get("myper");echo $str->name."<br>";//擷取伺服器的相關資訊echo $mem->getVersion()."<br>";echo "<pre>";echo var_dump($mem->getStats());echo "</pre>";$mem->flush();$mem->close();}?>
附php的memcached擴充庫下載(php5.2和php5.3)
點擊開啟連結