php操作memcache的使用【轉】


1.簡介

Memcache是danga.com的一個項目,最早是為 LiveJournal 服務的,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。它可以應對任意多個連接,使用非阻塞的網絡IO。由於它的工作機制是在內存中開辟一塊空間,然后建立一個HashTable,Memcached自管理這些HashTable。Memcache官方網站:http://www.danga.com/memcached,更多詳細的信息可以來這里了解。

為什么會有Memcache和memcached兩種名稱?其實Memcache是這個項目的名稱,而memcached是它服務器端的主程序文件名,知道我的意思了把~~~~。一個是項目名稱,一個是主程序文件名。

Memcache的安裝

分為兩個過程:memcache服務器端的安裝和memcached客戶端的安裝。

所謂服務器端的安裝就是在服務器(一般都是linux系統)上安裝Memcache實現數據的存儲。

所謂客戶端的安裝就是指php(或者其他程序,Memcache還有其他不錯的api接口提供)去使用服務器端的Memcache提供的函數,需要php添加擴展。

 

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

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

更多Memcache 模塊相關信息可以到 http://www.danga.com/memcached/ 查閱。

 1.1.memcache在php.ini中的配置項列表

memcache在php.ini中的配置項列表
名稱 默認值 是否可變 改變日志
memcache.allow_failover “1” PHP_INI_ALL Available since memcache 2.0.2.
memcache.max_failover_attempts "20" PHP_INI_ALL Available since memcache 2.1.0.
memcache.chunk_size "8192" PHP_INI_ALL Available since memcache 2.0.2.
memcache.default_port "11211" PHP_INI_ALL Available since memcache 2.0.2.
memcache.hash_strategy "standard" PHP_INI_ALL Available since memcache 2.2.0.
memcache.hash_function "crc32" PHP_INI_ALL Available since memcache 2.2.0.
session.save_handler "files" PHP_INI_ALL Supported since memcache 2.1.2
session.save_path "" PHP_INI_ALL Supported since memcache 2.1.2

有關 PHP_INI_* 常量進一步的細節與定義參見PHP手冊php.ini 配置選項。

1.2.以下是配置項的簡要解釋

memcache.allow_failover Boolean

在錯誤時是否透明的故障轉移到其他服務器上處理(注:故障轉移是動詞)。

memcache.max_failover_attempts integer

定義服務器的數量類設置和獲取數據,只聯合 memcache.allow_failover 一同使用。

memcache.chunk_size integer

數據將會被分成指定大小(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常量列表
名稱 類型 描述
MEMCACHE_COMPRESSED integer 用於調整在使用 Memcache::set(), Memcache::add() 和 Memcache::replace() 幾個函數時的壓縮比率。
MEMCACHE_HAVE_SESSION integer 如果通信對話的處理(session handler)被允許使用其值為 1,其他情況值為 0。

2Memcache Functions 函數列表

2.1.Memcache::connect

2.1.1.說明

bool Memcache :: connect (  string   $host  [ ,  int  $port  [ ,  int  $timeout  ]] )

連接memcache服務器

2.1.2.參數

$host(string)  服務器域名或ip

$port(int)  服務器tcp端口號,默認值是11211

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

2.1.3.返回值

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

2.1.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*  OO API  */
$memcache   =   new  Memcache;
$memcache -> connect(‘memcache_host‘ ,   11211 );
?>
復制代碼
 
        

2.2.Memcache::pconnect

2.2.1.說明

bool Memcache :: pconnect (  string   $host  [ ,  int  $port  [ ,  int  $timeout  ]] )

以常連接方式連接服務器

2.2.2.參數

$host(string)  服務器域名或ip

$port(int)  服務器tcp端口號,默認值是11211

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

2.2.3.返回值

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

2.2.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_pconnect(‘memcache_host‘ ,   11211 );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> pconnect(‘memcache_host‘ ,   11211 );
?>
復制代碼
 
        

2.3.Memcache::close

2.3.1.說明

bool Memcache :: close ( void )

關閉對象 (對常連接不起作用)

2.3.2.返回值

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

2.3.3.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*    do something here ..    */
memcache_close(
$memcache_obj );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
/*   do something here ..   */
$memcache_obj -> close();
?>
復制代碼

2.4.Memcache::addServer

2.4.1.說明

bool Memcache :: addServer (  string   $host  [ ,  int  $port  [ ,  bool  $persistent  [ ,  int  $weight  [ ,  int  $timeout  [ ,  int  $retry_interval  [ ,  bool  $status  [ ,   callback   $failure_callback  ]]]]]]] )

向對象添加一個服務器(注:addServer沒有連接到服務器的動作,所以在memcache進程沒有啟動的時候,執行addServer成功也會返回true)

2.4.2.參數

host               服務器域名或 IP

port               端口號,默認為 11211

persistent         是否使用常連接,默認為 TRUE

weight             權重,在多個服務器設置中占的比重

timeout          連接服務器失效的秒數,修改默認值 1 時要三思,有可能失去所有緩存方面的優勢導致連接變得很慢

retry_interval    服務器連接失敗時的重試頻率,默認是 15 秒一次,如果設置為 -1 將禁止自動重試,當擴展中加載了 dynamically via dl() 時,無論本參數還是常連接設置參數都會失效。

                          每一個失敗的服務器在失效前都有獨自的生存期,選擇后端請求時會被跳過而不服務於請求。一個過期的連接將成功的重新連接或者被標記為失敗的連接等待下一次 重試。這種效果就是說每一個 web server 的子進程在服務於頁面時的重試連接都跟他們自己的重試頻率有關。

status             控制服務器是否被標記為 online,設置這個參數為 FALSE 並設置 retry_interval 為 -1 可以使連接失敗的服務器被放到一個描述不響應請求的服務器池子中,對這個服務器的請求將失敗,接受設置為失敗服務器的設置,默認參數為 TRUE,代表該服務器可以被定義為 online。

failure_callback   失敗時的回調函數,函數的兩個參數為失敗服務器的 hostname 和 port

2.4.3.返回值

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

注:在測試addServer函數的時候我們主要測試了其參數retry_interval和status

2.4.4.范例

2.4.4.1.retry_interval參數的測試

<? php
$mem   =   new  Memcache;
$is_add   =   $mem -> addServer(‘localhost‘ ,   11211 ,   true ,   1 ,   1 ,   15 ,   true );  //  retrt_interval=15
$is_set   =   $mem -> set(‘key1‘ ,  ‘中華人民共和國‘);
?>

  

上面的例子中如果localhost服務器down掉或是memcache守護進程當掉,執行請求的時候連接服務器失敗時算起15秒后會自動重試連 接服務器,但是在這15秒內不會去連接這個服務器,就是只要有請求,沒15秒就會嘗試連接服務器,但是每個服務器連接重試是獨立的。比如說我一次添加了兩 個服務器一個是localhost,一個是172.16.100.60,它們分別是從各自連接失敗那個時間算起,只要對各自服務器有請求就會每隔15秒去 連接各自的服務器的。

2.4.4.2.retry_interval和status結合使用的情況

<? php
$mem   =   new  Memcache;
$is_add   =   $mem -> addServer(‘localhost‘ ,   11211 ,   true ,   1 ,   1 ,   - 1 ,   false );  //  retrt_interval=-1, status=false
$is_set   =   $mem -> set(‘key1‘ ,  ‘中華人民共和國‘);
?>
 
        

在上面的retrt_interval=-1, status=false這種情況下,將連接失敗的服務器放到一個不響應請求的一個池子中,因此對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::add

2.5.1.說明

bool Memcache :: add (  string   $key   ,   mixed   $var  [ ,  int  $flag  [ ,  int  $expire  ]] ) 



添加一個要緩存的數據如果作為這個緩存的數據的鍵在服務器上還不存在的情況下,

2.5.2.參數

key                緩存數據的鍵 其長度不能超過250個字符

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

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

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

2.5.3.返回值

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

2.5.4.范例

復制代碼
<? php
$memcache_obj   =  memcache_connect( " localhost " ,   11211 );
/*  procedural API  */
memcache_add(
$memcache_obj ,  ‘var_key‘ ,  ‘test variable‘ ,   FALSE ,   30 );
/*  OO API  */
$memcache_obj -> add(‘var_key‘ ,  ‘test variable‘ ,   FALSE ,   30 );
?>
復制代碼
 
        

2.6.Memcache::replace

2.6.1.說明

bool Memcache :: replace (  string   $key   ,   mixed   $var  [ ,  int  $flag  [ ,  int  $expire  ]] )

替換一個指定 已存在key 的的緩存變量內容

2.6.2.參數

key                緩存數據的鍵, 其長度不能超過250個字符

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

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

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

2.6.3.返回值

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

2.6.4.范例

復制代碼
<? php
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*  procedural API  */
memcache_replace(
$memcache_obj ,   " test_key " ,   " some variable " ,   FALSE ,   30 );
/*  OO API  */
$memcache_obj -> replace( " test_key " ,   " some variable " ,   FALSE ,   30 );
?>
復制代碼
 
        

2.7.Memcache::set

2.7.1.說明

bool Memcache :: set (  string   $key   ,   mixed   $var  [ ,  int  $flag  [ ,  int  $expire  ]] )


設置一個指定 key 的緩存變量內容

2.7.2.參數

key                緩存數據的鍵, 其長度不能超過250個字符

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

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

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

2.7.3.返回值

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

2.7.4.范例

復制代碼
<? php
/*  procedural API  */
/*  connect to memcached server  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*
set value of item with key ‘var_key‘
using 0 as flag value, compression is not used
expire time is 30 second
*/
memcache_set(
$memcache_obj ,  ‘var_key‘ ,  ‘some variable‘ ,   0 ,   30 );
echo  memcache_get( $memcache_obj ,  ‘var_key‘);
?>
復制代碼
復制代碼
<? php
/*  OO API  */
$memcache_obj   =   new  Memcache;
/*  connect to memcached server  */
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
/*
set value of item with key ‘var_key‘, using on-the-fly compression
expire time is 50 seconds
*/
$memcache_obj -> set(‘var_key‘ ,  ‘some really big variable‘ ,  MEMCACHE_COMPRESSED ,   50 );
echo   $memcache_obj -> get(‘var_key‘);
?>
復制代碼
 
        

2.8.Memcache::get

2.8.1.說明

string Memcache::get ( string $key [, int &$flags ] )

array Memcache::get ( array $keys [, array &$flags ] )

獲取某個 key 的變量緩存值

2.8.2.參數

key                緩存值的鍵

flags              如果是傳址某個變量,獲取緩存值被set或是add的flag結果將被存於該變量

2.8.3.返回值

返回緩存的指定 key 的變量內容或者是在失敗或該變量的值不存在時返回 FALSE

 如果傳出的key的數組中的key都不存在,返回的結果是一個空數組,反之則返回key與緩存值相關聯的關聯數組

2.8.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
$var   =  memcache_get( $memcache_obj ,  ‘some_key‘);
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
$var   =   $memcache_obj -> get(‘some_key‘);
/*
You also can use array of keys as a parameter.
If such item wasn‘t found at the server, the result
array simply will not include such key.
*/
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
$var   =  memcache_get( $memcache_obj ,   Array (‘some_key‘ ,  ‘another_key‘));
// 如果some_key,another_key不存在 $var = array();
//如果some_key,another_key存在     $var = array(‘some_key‘=>‘緩存值‘, ‘another_key‘=>‘緩存值‘);

/*
 OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
$var   =   $memcache_obj -> get( Array (‘some_key‘ ,  ‘second_key‘));
?>
復制代碼

2.9.Memcache::delete

2.9.1.說明

bool Memcache :: delete (  string   $key  [ ,  int  $timeout  ] )

刪除某一個變量的緩存

2.9.2.參數

key          緩存的鍵 鍵值不能為null和‘’,當它等於前面兩個值的時候php會有警告錯誤。

timeout   刪除這項的時間,如果它等於0,這項將被立刻刪除反之如果它等於30秒,那么這項被刪除在30秒內 

2.9.3.返回值

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

2.9.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*  after 10 seconds item will be deleted by the server  */
memcache_delete(
$memcache_obj ,  ‘key_to_delete‘ ,   10 );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
$memcache_obj -> delete(‘key_to_delete‘ ,   10 );
?>
復制代碼

2.10.Memcache::flush

2.10.1.說明

bool Memcache :: flush  ( void )

清空所有緩存內容,不是真的刪除緩存的內容,只是使所有變量的緩存過期,使內存中的內容被重寫

2.10.2.返回值

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

2.10.3.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
memcache_flush(
$memcache_obj );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
$memcache_obj -> flush ();
?>
復制代碼

2.11.Memcache::getExtendedStats

2.11.1.說明

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

獲取所有服務器擴展靜態信息 

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

輸出結果
復制代碼
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

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   $host  [ ,  int  $port  ] )

通過輸入的 host 及 port 來獲取相應的服務器信息

2.13.2.參數

host 服務器域名或 IP

port 端口號,默認為 11211

2.13.3.返回值

返回服務器狀態,0 為失敗,其他情況返回非 0 數字 

2.13.4.范例

復制代碼
<? php
/*  OO API  */
$memcache   =   new  Memcache;
$memcache -> addServer(‘memcache_host‘ ,   11211 );
echo   $memcache -> getServerStatus(‘memcache_host‘ ,   11211 );
/*  procedural API  */
$memcache   =  memcache_connect(‘memcache_host‘ ,   11211 );
echo  memcache_get_server_status( $memcache ,  ‘memcache_host‘ ,   11211 );
?>
復制代碼

2.14.Memcache::getVersion

2.14.1.說明

string  Memcache :: getVersion ( void )

獲取服務器的版本號信息 

2.14.2.返回值

成功返回服務器的版本號字符串,失敗返回 FALSE 

2.14.3.范例

復制代碼
<? php
/*  OO API  */
$memcache   =   new  Memcache;
$memcache -> connect(‘memcache_host‘ ,   11211 );
echo   $memcache -> getVersion();
/*  procedural API  */
$memcache   =  memcache_connect(‘memcache_host‘ ,   11211 );
echo  memcache_get_version( $memcache );
?>
復制代碼

2.15.Memcache::setCompressThreshold

bool Memcache :: setCompressThreshold ( int  $threshold  [ ,   float   $min_savings  ] )

設置壓縮極限

2.15.2.參數

threshold 設置控制自動壓縮的變量長度的最小值

min_saving 指定的最低壓縮比率,值必須介於 0 - 1 之間,默認為 0.2 代表 20% 的壓縮比率 

2.15.3.返回值

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

2.15.4.范例

復制代碼
<? php
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> addServer(‘memcache_host‘ ,   11211 );
$memcache_obj -> setCompressThreshold( 20000 ,   0.2 );
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
memcache_set_compress_threshold(
$memcache_obj ,   20000 ,   0.2 );
?>
復制代碼

2.16.Memcache::setServerParams

2.16.1.說明

bool Memcache :: setServerParams (  string   $host  [ ,  int  $port  [ ,  int  $timeout  [ ,  int  $retry_interval  [ ,  bool  $status  [ ,   callback   $failure_callback  ]]]]] )

Memcache version 2.1.0 后增加的函數,運行時設置服務器參數

2.16.2.參數

host           服務器域名或 IP

port 端口號,默認為 11211

timeout     超時連接失效的秒數,修改默認值 1 時要三思,有可能失去所有緩存方面的優勢導致連接變得很慢

retry_interval     服務器連接失敗時的重試頻率,默認是 15 秒一次,如果設置為 -1 將禁止自動重試,當擴展中加載了 dynamically via dl() 時,無論本參數還是常連接設置參數都會失效。 每一個失敗的服務器在失效前都有獨自的生存期,選擇后端請求時會被跳過而不服務於請求。一個過期的連接將成功的重新連接或者被標記為失敗的連接等待下一次 重試。這種效果就是說每一個 web server 的子進程在服務於頁面時的重試連接都跟他們自己的重試頻率有關。

status    控制服務器是否被標記為 online,設置這個參數為 FALSE 並設置 retry_interval 為 -1 可以使連接失敗的服務器被放到一個描述不響應請求的服務器池子中,對這個服務器的請求將失敗,接受設置為失敗服務器的設置,默認參數為 TRUE,代表該服務器可以被定義為 online。

failure_callback    失敗時的回調函數,函數的兩個參數為失敗服務器的 hostname 和 port 

2.16.3.返回值

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

2.16.4.范例

復制代碼
<? php
function  _callback_memcache_failure( $host ,   $port )
{
print   " memcache ‘ $host : $port ‘ failed " ;
}
/*  OO API  */
$memcache   =   new  Memcache;
//  Add the server in offline mode
$memcache -> addServer(‘memcache_host‘ ,   11211 ,   FALSE ,   1 ,   1 ,   - 1 ,   FALSE );
//  Bring the server back online
$memcache -> setServerParams(‘memcache_host‘ ,   11211 ,   1 ,   15 ,   TRUE ,  ‘_callback_memcache_failure‘);
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
memcache_set_server_params(
$memcache_obj ,  ‘memcache_host‘ ,   11211 ,   1 ,   15 ,   TRUE ,  ‘_callback_memcache_failure‘);
?>
復制代碼

2.17.Memcache::increment

2.17.1.說明

int Memcache :: increment (  string   $key  [ ,  int  $value  ] )

給指定 key 的緩存變量一個增值,如果該變量不是數字時不會被轉化為數字,這個增值將會加到該變量原有的數字之上,變量不存在不會新增變量,對於壓縮存儲的變量不要使用本函數因為相應的取值方法會失敗。 

2.17.2.參數

key 緩存值的鍵

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

2.17.3.返回值

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

2.17.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*  increment counter by 2  */
$current_value   =  memcache_increment( $memcache_obj ,  ‘counter‘ ,   2 );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
/*  increment counter by 3  */
$current_value   =   $memcache_obj -> increment(‘counter‘ ,   3 );
?>
復制代碼

2.18.Memcache::decrement

2.18.2.說明

int Memcache :: decrement (  string   $key  [ ,  int  $value  ] )

給指定 key 的緩存變量一個遞減值,與 increment 操作類似,將在原有變量基礎上減去這個值,該項的值將會在轉化為數字后減去,新項的值不會小於 0,對於壓縮存儲的變量不要使用本函數因為相應的取值方法會失敗。 

2.18.2.參數

key 緩存值的鍵

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

2.18.3.返回值

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

2.18.4.范例

復制代碼
<? php
/*  procedural API  */
$memcache_obj   =  memcache_connect(‘memcache_host‘ ,   11211 );
/*  decrement item by 2  */
$new_value   =  memcache_decrement( $memcache_obj ,  ‘test_item‘ ,   2 );
/*  OO API  */
$memcache_obj   =   new  Memcache;
$memcache_obj -> connect(‘memcache_host‘ ,   11211 );
/*  decrement item by 3  */
$new_value   =   $memcache_obj -> decrement(‘test_item‘ ,   3 );
?>
復制代碼

2.19.memcache_debug

2.19.1.說明

bool memcache_debug ( bool  $on_off  )

設置 memcache 的調試器是否開啟,值為 TRUE 或 FALSE。 受影響於 php 安裝時是否使用了 --enable-debug 選項,如果使用了該函數才會返回 TRUE,其他情況將始終返回 FALSE。 

2.19.2.參數

on_off 設置調試模式是否開啟,TRUE 為開啟,FALSE 為關閉

2.19.3.返回值

php 安裝時如果使使用了 --enable-debug 選項返回 TRUE,否則將返回 FALSE。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM