1.簡介
memcache模組是一個高效的守護進程,提供用於內存緩存的過程序程序和麵向對象的方便的接口,特別是對於設計動態web程序時減少對數據庫的訪問。
memcache也提供用於通訊對話(session_handler)的處理。
更多Memcache 模組相關資訊可以到 http://www.danga.com/memcached/ 查閱。
1.1.memcache在php.ini中的設定項清單
名稱 | memcache.allow_failover | 「1」 | PHP_INI_ALL |
Available since memcache 2.1.0. | memcache. chunk_size | ||
PHP_INI_ALL | Available since memcache 2.0.2. | memcache.default_PH% vailable since memcache 2.0.2. | |
memcache.hash_strategy | "standard" | PHP_INI_ALL | Available since memcache 2.2.0. |
memcache.hash_functionINPHnemPH | mcache 2.2.0. | session.save_handler | |
PHP_INI_ALL | Supported since memcache 2.1.2 | session.save_path | _|
有關PHP_INI_* 常數進一步的細節與定義參見PHP手冊php.ini 設定選項。 | 1.2.以下是配置項目的簡要解釋 | memcache.allow_failover | |
在錯誤時是否透明的故障轉移到其他伺服器上處理(註:故障轉移是動詞)。 | memcache.max_failover_attempts | integer | |
memcache.chunk_size |
資料將會被分成指定大小(chunk_size)的塊來傳輸,這個值(chunk_size)就會被分成指定大小(chunk_size)的塊來傳輸,這個值(chunk_size)就越小的無法解釋的減速,請試著將這個值增加到32768.
memcache.default_portstring當連接memcache伺服器的時候,如果沒有指定連接埠這個預設的tcp連接埠將被使用。
memcache.hash_strategystring控制在映射 key 到伺服器時使用哪種策略。設定這個值一致能使hash 演算法始終如一的使用於伺服器接受新增或刪除池中變數時將不會被重新映射。設定這個值以標準的結果在舊的策略被使用時。
memcache.hash_function string
控制哪一個 hsah 函數應用於 key映射 到伺服器過程中,預設值「crc32」使用 CRC32 演算法,而「fnv」則表示使用 FNV-1a 演算法。 session.save_handler
string透過設定此值為memcache來決定使用 memcache 用於通訊對話的處理(session handler)。 session.save_path
string定義用於通話儲存的各伺服器連結的分隔符號,例如:「tcp://host1:11211, tcp://host2:11211」。 每伺服器個連結可以包含被接受於該伺服器的參數,比較類似使用Memcache::addServer() 來新增的伺服器,例如:「tcp://host1:11211?persistent=1&weight=1&timeout=1& amp; retry_interval=15”。 1.3.memcache常數列表
memcache常數列表名稱
類型 ::set(), Memcache::add () 和Memcache::replace() 幾個函數時的壓縮比率。MEMCACHE_HAVE_SESSION
integer如果通訊對話的處理(session handler)被允許使用其值為 1,其他情況值為 0。2Memcache Functions 函數清單 2.1.Memcache::connect bool Meconache::bool Meconache::bool Meconache $host [, int $port [, int $timeout2.1.1.說明
$port(int) 伺服器tcp連接埠號,預設值是11211
2.1.3.回傳值
如果成功則回傳true,失敗則回傳false
2.1.4.範例
* procedural API
=
memcache_connect('memcache_host',
/* OO API */$memcache = new Memcache;$memcache-> 211
);?> 2.2.Memcache::pconnect2.2.1.說明
$host [, int $port [
, int
$timeout .2.2.參數
$host(string ) 伺服器網域名稱或ip$timeout 連接memcache進程的失效時間,在修改它的預設值1的時候要三思,以免失去所有memcache快取的優勢導致連線變得很慢。
2.2.4.範例? edural API */$memcache_obj = memcache_pconnect('meache_host'1, /* OO API */$ memcache_obj
Memcache;
11211
2.3.Memcache::close2.3.1.說明bool Memcache 關閉物件(對常連線不作用)2.3.2.回傳值如果成功則回傳true,失敗則回傳false2.3.3.範例
php
/* 程序API */$memcache_objache🜎 , 11211); /* 在這裡做些什麼 .. */
memcache_close($ */ $memcache_obj
=
新 Memcache;$memcache_obj->connect('memcache_host' ); /* 在這裡做些事情..
*/$memcache_obj->close();?> 2.4.1.說明
bool Memcache::addServer (string
[ ,
$持久 [
, int $ [, 布爾$狀態 [, callback $failure_callback伺服器 的動作,所以memcache進程進程啟動的的,增加了(新增true)2.4.2。weight 權重,在多個伺服器設定中存在可能失去所有儲存方面的優勢導致連線連線很慢retry_interval 伺服器連線失敗時的重試頻率,預設為15秒一次,如果設定為-1將禁止自動重試,當透過dl()動態擴充中載入了時,本參數或常連接設定參數都會失效。重新連線或被標記為失敗的連線等待下一次重連試。 status 控制伺服器是否被標記為在線,並設定這個參數為FALSE 並設定retry_interval 為-1 可以使連線失敗的伺服器被放到一個描述不回應的伺服器池中,對這個伺服器的請求將失敗,設定為失敗伺服器的設置,預設參數為TRUE,代表該伺服器可以定義為在線。 failure_callback 失敗時的回呼函數,函數的兩個參數為失敗伺服器的主機名稱和連接埠2.4.3.傳回值成功回傳 TRUE,失敗回傳 FALSE。 註:測試中addServer函數的時候我們測試主要了其參數retry_interval和status2.4.4.範例2.4.4.1.retry_interval參數的測試 php
$mem = =
$mem->addServer ('localhost', 11211, true , 15, true); // retrt_interval=15$is_set =$1 , '中華人民共和國');?>上面的例子中如果localhost伺服器down掉或是memcache守護進程當掉,執行請求的時候連接伺服器失敗時算起15秒後會自動重試秒後會自動重試連接伺服器,但在這15秒內不會去連接這台伺服器,就是只要有請求,沒15秒就會嘗試連接伺服器,但是每個伺服器連線重試是獨立的。比如說我一次加了兩 個伺服器一個是localhost,一個是172.16.100.60,它們分別是從各自連線失敗那個時間算起,只要對各自伺服器有請求就會每隔15秒去 連接各自的伺服器的。 2.4.4.2.retry_interval與status結合使用的情況php$mem ;$is_add
=
12111,
12111 1, 1
, -1, false); $is_set = $mem->set('key1', '中華人民共和國');?>_?>情況下,將連線失敗的伺服器放到一個不回應請求的一個池子中,因此對key分配的演算法也就沒有影響了,而他是立即返回錯誤失敗還是故障轉移還要看memcache.allow_failover的設置,執行set, add, replace,get等請求的時候都會失敗回傳false,即使memcache進程運作正常。 2.4.4.3.status參數的測試除了與retry_interval結合使用,status單獨使用的情況會對函數memcache::getServerStatu獲得的結果產生影響無論memcache進程的正常運行還是當掉,status為true的時候getServerStatus的結果都是true,反之則為false但是在memcache進程正常運作的情況下,對set,add,replace,get等函數都沒有影響。 2.5.Memcache::add2.5.1.說明bool Memcache::add (p , mixed $var [,
int $flag
[
添加一個要緩存的資料如果作為這個快取的資料的鍵在伺服器上還不存在的情況下,
2.5.2.參數
key 值,整型將直接存儲,其他類型將被序列化存儲,其值最大為1M
flag 是否使用 zlib 壓縮 ,當flag=MEMCACHE_COMPRESSED的時侯,數據很小的時候不會採用zlib壓縮,只有數據達到一定大小才對數據進行zlib壓縮。 (沒有特定的測試資料進行壓縮的最小值是多少)
expire 過期時間,0 為永不過期,可使用unix 時間戳格式或距離目前時間的秒數,設為秒數時不能大於2592000(330天)
成功回傳TRUE,失敗回傳FALSE,如果這個鍵已經存在,其他面向memcache:;add()的行為與memcache::set相似
php$memcache_obj = ", 11211);/ **/ procedural API */memcache_add($memcache_obj,) FALSE, 30 );/* OO API */$memcache_objvar->$memcache_objvar->. ', FALSE , 30);?> bool Memcache: :replace ( string
$key
,,
[, int $expire ]] )替換一個指定已存在key 的快取變數 快取資料的鍵, 其長度不能超過250個字符var 值,且整數將直接存儲,其他類型將序列化存儲,其值最大為1Mflag ,資料很小的時候不會採用zlib壓縮,只有資料達到一定大小才對資料進行zlib壓縮。 (沒有特定的測試資料進行壓縮的最小值是多少)expire 過期時間,0 為永不過期,可使用unix 時間戳格式或距離目前時間的秒數,設為秒數時不能大於2592000(330天)2.6.3.回傳值成功回傳TRUE,失敗回傳FALSE。 2.6.4.範例
php
$memcache_obj = memcache_connect('memcache_host' ); /* 程式API */
memcache_replace($memcache_obj,
"test_ 「, 假, 30);/* OO API */$memcache_objjped ", “ 一些變數
」, FALSE, 30);); > 2.7.Memcache:2.7.1.說明 string $key
,
混合
$varint $expire
]] ) 設定指定的變數儲存金鑰內容 2.7.2.參數key 值,整將直接存儲,其他類型將被序列化存儲,其值最大為1Mflag 是否使用zlib 壓縮,當fla克= MEMCACHE_COMPRESSED的時侯,資料粒徑的時候不會採用zlib壓縮,只有資料達到一定大小才壓縮資料。 (沒有特定的測試資料進行壓縮的簡單是多少)expire 過渡時間,以永不逾越,可使用unix計時器格式或距離目前時間的秒數,設定數時不能大於25920002592000(30天)天2.7.3.回傳值成功回傳TRUE,失敗回傳FALSE。 2.7.4. 範例php* 連接到 memcached 伺服器*/ $memcache_obj =
memcache_connect('memcache_host'1.
設定項目的值帶有鍵“var_key”,使用0 作為標誌值,壓縮未使用過期時間為30 秒*/memcache_set($memcache_obj, 'var_key',
,
30);echo memcache_get($memcache_obj?,,$ php/* OO API */$ Memcache;/* 連接到 memcached 伺服器 */$memcache_obj->connect('memcache_host', “var_key”的項目的值,使用即時壓縮的過期時間為50 秒*/$memcache_obj->set('var_key',MCA ED , 50);echo $memcache_obj->?
php
/* 程序API */$memcache_objache🜎 , 11211); $var =
memcache_get($memcache_obj,* $memcache_obj =
新 Memcache;$memcache_obj->connect('memcache_host',connect('memcache_host' $var
= $ memcache_obj->get('some_key');/*
您也可以使用鍵數組作為參數。 如果在伺服器上沒有找到這樣的項目,則結果數組根本不會包含這樣的鍵。 *//* 程式API */$memcache_obj
11211
);
$var = memcache_get($memcache_obj, Array //如果some_key,another_key不有$var = array();//若some_key,another_key存在 $var = array('some_key'=>'伺服器值', 'another_key'=>'伺服器值');/T API
*/$memcache_obj = 新_b memcache_host ', 11211) ;
$var =
$memcache_obj-> 'second_key'));?>
2.9.Memcache::刪除2.9.1.說明2.9.Memcache::刪除2.9.1.說明 $key
[ , int $timeout ] )鍵個值的時候php會有警告錯誤。 timeout 刪除這個的時間,如果它等於0,這個就會被立即刪除反之如果它相當於30秒,那麼這個就在30秒內被刪除了2.9.3.回傳值成功回傳TRUE ,失敗返回FALSE。
2.9.4.例
php
/* procedural API */ , 11211); /* after 10 seconds item will be deleted by the server
*/memcache_delete(),_delete( _delete',
10); /* OO API */$memcache_obj
= ->connect('memcache_host', 11211);$memcache_obj->
delete('key_to_delete',delete('key_to_delete' ?>
2.10.Memcache::flush2.10.1.說明bool Memcache::flush
真的刪除快取的內容,只是使所有變數的快取過期,使記憶體中的內容被重寫2.10.2.回傳值
2.10.3.範例
* j = memcache_connect('memcache_host' ,
$memcache_obj
🜎); $memcache_obj
=
new Memcache;$memcache_obj->connect('memcache_host', _obj->flush(); ?>
2.11.Memcache::getExtendedStats ::getExtendedStats ([ string $type
[, int $slabid [,
取得所有伺服器擴充靜態資訊 2.11.2.參數type 靜態信息類型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定規則協議這個可選參數是為了方便開發人員查看不同類別的信息而輸入的標題slabid 用於按指定類型聯合設定cache 堆為有效的片到堆中。快取堆被命令綁定到伺服器上並被嚴格的用於調試用途limit 用於按指定類型聯合設定cache 堆為輸入的數字所限制的大小到堆,預設值為100
2.11.3 .回傳值回傳一個由伺服器擴充靜態資訊二維數組,失敗時回傳FALSE
php
$memcache_obj = new Memcache;
$memcache_obj->addServer(‘memcache_host‘, 11211);
$memcache_obj->addServer(‘failed_host‘, 11211);
$stats = $memcache_obj->getExtendedStats(); print_r($stats);
?>
输出结果
Array(
[memcache_host:11211] => Array(
[pid] => 3756
[uptime] => 603011
[time] => 1133810435
[version] => 1.1.12
[rusage_user] => 0.451931
[rusage_system] => 0.634903
[curr_items] => 2483
[total_items] => 3079
[bytes] => 2718136
[curr_connections] => 2
[total_connections] => 807
[connection_structures] => 13
[cmd_get] => 9748
[cmd_set] => 3096
[get_hits] => 5976
[get_misses] => 3772
[bytes_read] => 3448968
[bytes_written] => 2318883
[limit_maxbytes] => 33554432
),
[failed_host:11211] =>
)
2.12.Memcache::getStats
array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )
获取最后添加服务器静态信息
type 静态信息类型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定规则协议这个可选参数是为了方便开发人员查看不同类别的信息而输入的标题
slabid 用于按指定类型联合设置 cache 堆为有效的片到堆中。缓存堆被被命令绑定到服务器上并被严格的用于调试用途
limit 用于按指定类型联合设置 cache 堆为输入的数字所限制的大小到堆,默认值为 100
返回一个服务器静态信息数组,失败时返回 FALSE
2.13.Memcache::getServerStatus
int Memcache::getServerStatus ( string int $port ] ) 透過輸入的host 及port 來取得對應的伺服器資訊2.13.2.參數
host 伺服器網域或IP*
$memcache
= new Memcache;$memcache->$memcache 1211);
echo $ memcache->getServerStatus('memcache_host',
11211 $memcache = memcache_connect( 'memcache_host', 11211);
echo meache ', 11211); ?>
2.14.Memcache::getVersion2.14.1.說明 getVersion ( void )取得伺服器的版本號碼資訊 2.14.2.回傳值成功回傳伺服器的版本號字串,失敗回傳FALSE 2.14.3.範例
? /*
OO API */
$memcache=
, 11211);
echo*/
= memcache_connect('memcache_host'
,
11211); ;?> 2.15.Memcache::setCompressThreshold
bool Memcache::setCompressThreshold ( int float $min_savings ] )
設定壓縮極限2.15.2.參數threshold 設定控制自動壓縮的變數長度的最小值
min_saving 指定的最低壓縮比率,數值必須介於0 - 1 之間,預設為0.2 代表20 % 的壓縮比率 2.15.3.回傳值成功回傳TRUE,失敗回傳FALSE。
php
* = 新 Memcache ;$memcache_obj->addServer('memcache_host',
112111, 112111, 112111
設定壓縮閾值(20000 , 0.2);/* 程式API
*/$ ect('memcache _主機', 11211 ) ?> 2.16.Memcache: : setServerParams
2.16.1.說明bool Memcache::setServerParams ( , int $port
[ ,
$逾時 [
,$retry_interval
回呼 $failure_callback ]]]]] )Memcache version 2.1.0 之後增加的函數,運行時設定伺服器參數2.16.2. port 連接埠號,預設為11211timeout 逾時連線失敗時的秒數,預設修改值1 時要三思,有可能失去所有伺服器方面的優點導致連線變得很慢retry_interval 伺服器連線失敗時的重試頻率,預設為15秒一次,如果設定為-1將禁止自動重試,當擴充功能中透過dl()動態載入了時,無論本參數還是常連線設定參數都會失效。每一個失敗的伺服器在失效前都有獨立的生存期,選擇主軸請求時會被跳過而不是服務於請求。一個過渡的連接將成功的重新連接或被標記為失敗的連接等待下一次重試。這個效果就是說每個Web伺服器的子程序在服務頁面時的重試連線都跟他們自己的重試頻率有關。 status 控制伺服器是否被標記為在線,設定此參數為FALSE 並設定retry_interval 為-1 可以使連接失敗的伺服器被轉發一個描述不響應請求的伺服器池子中,對這個伺服器的請求將失敗,接受設定為失敗伺服器的設置,預設參數為TRUE,代表該伺服器可以定義為在線。 failure_callback 失敗時的回呼函數,函數這兩個參數分別為失敗伺服器的主機名稱和連接埠2.16.3.回傳值成功TRUE,失敗回傳FALSE。 2.16.4.例 php , '計數器'
函數 _callback_memcache_failure($主機, 「記憶體快取」
$主機:$埠'失敗";}/*=$ 新
內存快取;// 以離線模式新增伺服器$memcache->addServer('meache_host'1, 假,
1, 1, -1 // 使伺服器恢復線上$ memcache ->setServerParams('memcache_host', 11211, , 真實, '_callback_memcache_failure' );/* 程式API
*/$memcache_obj 11211);memcache_set_server_params( $memcache_obj , 'memcache_host', 11211, , TRUE, '_callback_memcache_failure ');
? 增量(字串 $key [, int $value ] )$value ] )
$value增值將加到該戒指原有的數字之上,戒指不存在不會增加戒指,對於壓縮存儲的戒指不要使用本函數因為相應的取值方法會失敗。值的鍵var 值,整數將直接存儲,其他類型將被序列化 2.17.3.返回值成功返回新的標誌值,失敗返回FALSE。 php/* 程式API */h mcache_connect('memcache_host', 11211 );/*
將計數器增加2 */
2);
/* OO API */$memcache_objh ;$memcache_obj- >connect( 'memcache_host', 11211);
增加計數器=
$ memcache_obj
->
,
);
?>2.18.Memcache::decrement
$key [ , int $value ] ) ] )
給指定key 的快取變數上遞減值,與increment 運算類似,將該項上減在這個值轉換為數字後減去,新項的值不會小於0,而對於壓縮儲存的變數不要使用本函數因為對應的值方法會失敗。
key 緩存值的鍵
var 值,整數將直接存儲,其他類型將被序列化存儲
成功返回新的變量值,失敗返回新的變量值返回FALSE。
php
* j = memcache_connect('memcache_host' , 11211);/* decrement item by = memcache_decrement(
$memcache_obj, ' test_item', 2);/* OO API new Memcache;$memcache_obj
->connect('memcache_host', 11211 $new_value =
$memcache_obj->decrement('test_item', 3);
3); 2.19.memcache_debug2.19.1 .說明bool memcache_debug ( bool $on_off ) )
)
2.19.2.參數on_off 設定調試模式是否開啟,TRUE 為開啟,FALSE 為關閉
2.19.3.返回值