首頁 >後端開發 >php教程 >PHP的memcache小結

PHP的memcache小結

WBOY
WBOY原創
2016-07-30 13:30:44980瀏覽

1.簡介

memcache模組是一個高效的守護進程,提供用於內存緩存的過程序程序和麵向對象的方便的接口,特別是對於設計動態web程序時減少對數據庫的訪問。

memcache也提供用於通訊對話(session_handler)的處理。

更多Memcache 模組相關資訊可以到 http://www.danga.com/memcached/ 查閱。

 1.1.memcache在php.ini中的設定項清單

Available since memcache 2.0.2.Available since memcache 2.1.0.memcache. chunk_size"8192"PHP_INI_ALLAvailable since memcache 2.0.2.memcache.default_PH% vailable since memcache 2.0.2.memcache.hash_strategy"standard"PHP_INI_ALLAvailable since memcache 2.2.0.memcache.hash_functionINPHnemPH" files"_ 有關PHP_INI_* 常數進一步的細節與定義參見PHP手冊php.ini 設定選項。 1.2.以下是配置項目的簡要解釋 Boolean在錯誤時是否透明的故障轉移到其他伺服器上處理(註:故障轉移是動詞)。  定義伺服器的數量類設定和獲取數據,只聯合 memcache.allow_failover 一同使用。  integer
memcache在php.ini中的設定項清單
名稱 memcache.allow_failover 「1」 PHP_INI_ALL
mcache 2.2.0. session.save_handler
PHP_INI_ALL Supported since memcache 2.1.2 session.save_path
memcache.allow_failover
memcache.max_failover_attemptsinteger
memcache.chunk_size

資料將會被分成指定大小(chunk_size)的塊來傳輸,這個值(chunk_size)就會被分成指定大小(chunk_size)的塊來傳輸,這個值(chunk_size)就越小的無法解釋的減速,請試著將這個值增加到32768.

memcache.default_port

 string當連接memcache伺服器的時候,如果沒有指定連接埠這個預設的tcp連接埠將被使用。

memcache.hash_strategy

 string控制在映射 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

2.1.1.說明

bool Meconache::bool Meconache::bool Meconache $host [,  int $port [, int $timeout

 ]].參數

$host(string)  伺服器網域名稱或ip

$port(int)  伺服器tcp連接埠號,預設值是11211

$timeout  連接memcache進程的失效時間,在修改它的預設值1的時候要三思,以免失去所有memcache快取的優勢導致連接變得很慢。

2.1.3.回傳值

如果成功則回傳true,失敗則回傳false

2.1.4.範例

* procedural API

*/

$memcache_obj

 PHP的memcache小結=

 memcache_connect('memcache_host',
/*
 OO API */$memcache  = new Memcache;$memcache-> 211
);?>

2.2.Memcache::pconnect2.2.1.說明
 $host [,  int $port [
, int 

$timeoutPHP的memcache小結 .2.2.參數

$host(string )  伺服器網域名稱或ip$port(int)  伺服器tcp連接埠號,預設值是11211

$timeout  連接memcache進程的失效時間,在修改它的預設值1的時候要三思,以免失去所有memcache快取的優勢導致連線變得很慢。

2.2.3.回傳值

若成功則回傳true,失敗則回傳false

2.2.4.範例? edural API  */$memcache_obj = memcache_pconnect('meache_host'1, /* OO API */$ memcache_obj

 =

 

new

 Memcache;

$meache_objache

 Memcache;

$meache_objache

11211

);

?>

PHP的memcache小結


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 
 [

 布爾

$持久PHP的memcache小結 [

, int 

$重量

 [

,

 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, tru​​e , 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 
= 

$mem->addServer('localhost'

,

 

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

 [,)$flag

 [

添加一個要緩存的資料如果作為這個快取的資料的鍵在伺服器上還不存在的情況下,

2.5.2.參數

key               值,整型將直接存儲,其他類型將被序列化存儲,其值最大為1M

flag               是否使用 zlib 壓縮 ,當flag=MEMCACHE_COMPRESSED的時侯,數據很小的時候不會採用zlib壓縮,只有數據達到一定大小才對數據進行zlib壓縮。 (沒有特定的測試資料進行壓縮的最小值是多少)

expire             過期時間,0 為永不過期,可使用unix 時間戳格式或距離目前時間的秒數,設為秒數時不能大於2592000(330天)

2.5.3.回傳值

成功回傳TRUE,失敗回傳FALSE,如果這個鍵已經存在,其他面向memcache:;add()的行為與memcache::set相似

2.5.4.範例

PHP的memcache小結

php$memcache_obj = ", 11211);/ **/ procedural API */memcache_add($memcache_obj,)  FALSE, 30 );/* OO API */$memcache_objvar->$memcache_objvar->. ', FALSE , 30);?> bool Memcache: :replace ( string

 

$keyPHP的memcache小結 

,

,

 int 

$flag

 [,  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  
, 

混合PHP的memcache小結 

$var [

 int 

$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'

,

 'var_key'

0

PHP的memcache小結 

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->?


2.8. Memcache::get2.8.1.說明string Memcache::get ( string $key [, int &$flags ] )array Memcache::get ( array $keys [, array &$ flags ] )mcache::get (re 取得某一個關鍵的設備值2.8.2.參數key                標誌結果將儲存於此指標 2.8.3.傳回值傳回儲存的指定金鑰的指標內容或失敗或該指標的值不存在時傳回FALSE 如果傳出該金鑰的陣列中的金鑰都不存在,傳回的結果是空備份,反則回傳key與伺服器值相關聯的關聯備份2​​.8.4.範例

PHP的memcache小結

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的memcache小結

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.回傳值

成功回傳TRUE,失敗回傳FALSE。

2.10.3.範例PHP的memcache小結

php

* j = memcache_connect('memcache_host' ,

 11211

);

memcache_flush(

$memcache_obj

);

$memcache_obj

🜎); PHP的memcache小結$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 

2.11.4.范例

php
$memcache_obj = new Memcache;
$memcache_obj->addServer(‘memcache_host‘, 11211);
$memcache_obj->addServer(‘failed_host‘, 11211);
$stats = $memcache_obj->getExtendedStats(); print_r($stats);
?>

输出结果

PHP的memcache小結

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=>
)

PHP的memcache小結


2.12.Memcache::getStats

2.12.1.说明

array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )

获取最后添加服务器静态信息 

2.12.2.参数

type       静态信息类型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定规则协议这个可选参数是为了方便开发人员查看不同类别的信息而输入的标题

slabid   用于按指定类型联合设置 cache 堆为有效的片到堆中。缓存堆被被命令绑定到服务器上并被严格的用于调试用途

limit      用于按指定类型联合设置 cache 堆为输入的数字所限制的大小到堆,默认值为 100 

2.12.3.返回值

返回一个服务器静态信息数组,失败时返回 FALSE 

2.13.Memcache::getServerStatus

2.13.1.說明

int Memcache::getServerStatus ( string  int $port ] ) 透過輸入的host 及port 來取得對應的伺服器資訊2.13.2.參數

host 伺服器網域或IPport 連接埠號,預設為11211

2.13.3. ,0 為失敗,其他情況回傳非0 數字 

2.13.4.範例

php

PHP的memcache小結*

$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 PHP的memcache小結*/

$memcache 

=

->

connect('memcache_host'

,  11211);

echo 

$memcache

*/

$memcache

 

= PHP的memcache小結 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。 

2.15.4.例

PHP的memcache小結

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
 [
,

 int 

$逾時PHP的memcache小結 [

, int 

$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 
*/

$current_value

 ,PHP的memcache小結 '計數器'

, 

2

);

/* OO API */$memcache_objh ;$memcache_obj- >connect( 'memcache_host', 11211);

/ *

 增加計數器=

 

$ memcache_obj

->

增量('計數器'

,

 

3

);PHP的memcache小結

?>

PHP的memcache小結

2.18.Memcache::decrement

2.18.2.說明

::

 $key [ , int $value ] ) ] )

給指定key 的快取變數上遞減值,與increment 運算類似,將該項上減在這個值轉換為數字後減去,新項的值不會小於0,而對於壓縮儲存的變數不要使用本函數因為對應的值方法會失敗。

2.18.2.參數

key 緩存值的鍵

var 值,整數將直接存儲,其他類型將被序列化存儲 

2.18.3.返回值

成功返回新的變量值,失敗返回新的變量值返回FALSE。

2.18.4.範例

PHP的memcache小結

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 ) )
 )

受影響於 php 安裝時是否使用了 --enable-debug 選項,如果使用了函數才會傳回 TRUE,其他情況將始終傳回 FALSE。

2.19.2.參數PHP的memcache小結on_off 設定調試模式是否開啟,TRUE 為開啟,FALSE 為關閉

2.19.3.返回值php 安裝時如果使使用了--enableUE-debug 選項返回值

php 安裝時如果使使用了--enableUE-debug 選項返回TR,將返回FALSE。

以上就介紹了PHP的memcache小結,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:echo與var_dump下一篇:echo與var_dump