關於Memcache與memcached
Memcache是項目名,memcached是服務名。讓很多初接觸的人感覺很是莫名其妙。個人認爲正確的應該是用前者用更爲正確一點。
安裝Memcache
Memcache分爲兩部分,Memcache服務端和客戶端。Memcache服務端是作爲服務來運行的,所有數據緩存的建立,存儲,刪除實際上都是在這裏完成的。客戶端,在這裏我們指的是PHP的可以調用的擴展。
1)安裝Memcache服務端
sudo apt-get install memcached
安裝完Memcache服務端以後,我們需要啓動該服務:
memcached -d -m 128 -p 11111 -u root
#memcached -d -m 128 -p 11211 -u root 我們本地用的是11211端口
這裏需要說明一下memcached服務的啓動參數:
-p 監聽的端口
-l 連接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數,默認是1024
-f 塊大小增長因子,默認是1.25-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助
2)安裝Memcache客戶端
sudo apt-get install php5-memcache
安裝完以後我們需要在php.ini裏進行簡單的配置,打開/etc/php5/apache2/php.ini文件在末尾添加如下內容:
[Memcache]
; 一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,
; 它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。
; 是否在遇到錯誤時透明地向其他服務器進行故障轉移。
memcache.allow_failover = On
; 接受和發送數據時最多嘗試多少個服務器,只在打開memcache.allow_failover時有效。memcache.max_failover_attempts = 20
; 數據將按照此值設定的塊大小進行轉移。此值越小所需的額外網絡傳輸越多。
; 如果發現無法解釋的速度降低,可以嘗試將此值增加到32768。
memcache.chunk_size = 8192
; 連接到memcached服務器時使用的默認TCP端口。
memcache.default_port = 11111
; 控制將key映射到server的策略。默認值”standard”表示使用先前版本的老hash策略。
; 設爲”consistent”可以允許在連接池中添加/刪除服務器時不必重新計算key與server之間的映射關係。
;memcache.hash_strategy = “standard”; 控制將key映射到server的散列函數。默認值”crc32″使用CRC32算法,而”fnv”則表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″
保存php.ini,執行sudo /etc/init.d/apache2 restart重啓Apache。
在PHP中使用Memcache
<?php
$mem = new Memcache; //創建Memcache對象
$mem->connect(”127.0.0.1″, 11111); //連接Memcache服務器
$val = “這是一個Memcache的測試.”;
$key = md5($val);
$mem->set($key, $val, 0, 120); //增加插入一條緩存,緩存時間爲120s
if(($k = $mem->get(’key’))){ //判斷是否獲取到指定的key
echo ‘from cache:’.$k;
} else {
echo ‘normal’; //這裏我們在實際使用中就需要替換成查詢數據庫並創建緩存.
}
?>
對於key,通常用md5 查詢語句來獲取,在實際使用中根據具體需要來決定好了…
通過上面的步驟,我們就完成了Memcache的配置和基本使用…
php5-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 — R對一個已有的key進行覆寫操作
Memcache::set — 添加一個值,如果已經存在,則覆寫
Memcache::setCompressThreshold — 對大於某一大小的數據進行壓縮
Memcache::setServerParams — 在運行時修改服務器的參數
這裏需要說明一下memcached服務的啓動參數:
-p 監聽的端口
-l 連接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數,默認是1024
-f 塊大小增長因子,默認是1.25-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助
2)安裝Memcache客戶端
sudo apt-get install php5-memcache
安裝完以後我們需要在php.ini裏進行簡單的配置,打開/etc/php5/apache2/php.ini文件在末尾添加如下內容:
[Memcache]
; 一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,
; 它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。
; 是否在遇到錯誤時透明地向其他服務器進行故障轉移。
memcache.allow_failover = On
; 接受和發送數據時最多嘗試多少個服務器,只在打開memcache.allow_failover時有效。memcache.max_failover_attempts = 20
; 數據將按照此值設定的塊大小進行轉移。此值越小所需的額外網絡傳輸越多。
; 如果發現無法解釋的速度降低,可以嘗試將此值增加到32768。
memcache.chunk_size = 8192
; 連接到memcached服務器時使用的默認TCP端口。
memcache.default_port = 11111
; 控制將key映射到server的策略。默認值”standard”表示使用先前版本的老hash策略。
; 設爲”consistent”可以允許在連接池中添加/刪除服務器時不必重新計算key與server之間的映射關係。
;memcache.hash_strategy = “standard”; 控制將key映射到server的散列函數。默認值”crc32″使用CRC32算法,而”fnv”則表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″
保存php.ini,執行sudo /etc/init.d/apache2 restart重啓Apache。
在PHP中使用Memcache
<?php
$mem = new Memcache; //創建Memcache對象
$mem->connect(”127.0.0.1″, 11111); //連接Memcache服務器
$val = “這是一個Memcache的測試.”;
$key = md5($val);
$mem->set($key, $val, 0, 120); //增加插入一條緩存,緩存時間爲120s
if(($k = $mem->get(’key’))){ //判斷是否獲取到指定的key
echo ‘from cache:’.$k;
} else {
echo ‘normal’; //這裏我們在實際使用中就需要替換成查詢數據庫並創建緩存.
}
?>
對於key,通常用md5 查詢語句來獲取,在實際使用中根據具體需要來決定好了…
通過上面的步驟,我們就完成了Memcache的配置和基本使用…
php5-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 — R對一個已有的key進行覆寫操作
Memcache::set — 添加一個值,如果已經存在,則覆寫
Memcache::setCompressThreshold — 對大於某一大小的數據進行壓縮
Memcache::setServerParams — 在運行時修改服務器的參數