1.簡介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_ALLAvailable since memcache 2.0.2.memcache.max_failover_attempts"20"PHP_INI_ALLAvailable since memcache 2.1.0.memcache.chunk_size"8192"PHP_INI_ALLAvailable since memcache 2.0.2.memcache.default_port"11211"PHP_INI_ALLAvailable since memcache 2.0.2.memcache.hash_strategy"standard"PHP_INI_ALLAvailable since memcache 2.2.0.memcache.hash_function"crc32"PHP_INI_ALLAvailable since memcache 2.2.0.session.save_handler"files"PHP_INI_ALLSupported since memcache 2.1.2session.save_path""PHP_INI_ALLSupported 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_COMPRESSEDinteger用於調整在使用 Memcache::set(), Memcache::add() 和 Memcache::replace() 幾個函數時的壓縮比率。MEMCACHE_HAVE_SESSIONinteger如果通訊對話的處理(session handler)被允許使用其值為 1,其他情況值為 0。2Memcache Functions 函數列表2.1.Memcache::connect2.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,失敗則返回false2.1.4.範例connect(‘memcache_host‘, 11211);?>2.2.Memcache::pconnect2.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,失敗則返回false2.2.4.範例pconnect(‘memcache_host‘, 11211);?>2.3.Memcache::close2.3.1.說明bool Memcache::close ( void )關閉對象 (對常串連不起作用)2.3.2.傳回值如果成功則返回true,失敗則返回false2.3.3.範例connect(‘memcache_host‘, 11211);/* do something here .. */$memcache_obj->close();?>2.4.Memcache::addServer2.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 伺服器網域名稱或 IPport 連接埠號碼,預設為 11211persistent 是否使用常串連,預設為 TRUEweight 權重,在多個伺服器設定中占的比重timeout 串連伺服器失效的秒數,修改預設值 1 時要三思,有可能失去所有緩衝方面的優勢導致串連變得很慢retry_interval 伺服器串連失敗時的重試頻率,預設是 15 秒一次,如果設定為 -1 將禁止自動重試,當擴充中載入了 dynamically via dl() 時,無論本參數還是常串連設定參數都會失效。 每一個失敗的伺服器在失效前都有獨自的生存期,選擇後端請求時會被跳過而不服務於請求。一個到期的串連將成功的重新串連或者被標記為失敗的串連等待下一次 重試。這種效果就是說每一個 web server 的子進程在服務於頁面時的重試串連都跟他們自己的重試頻率有關。status 控制伺服器是否被標記為 online,設定這個參數為 FALSE 並設定 retry_interval 為 -1 可以使串連失敗的伺服器被放到一個描述不響應請求的伺服器集區子中,對這個伺服器的請求將失敗,接受設定為失敗伺服器的設定,預設參數為 TRUE,代表該伺服器可以被定義為 online。failure_callback 失敗時的回呼函數,函數的兩個參數為失敗伺服器的 hostname 和 port2.4.3.傳回值成功返回 TRUE,失敗返回 FALSE。註:在測試addServer函數的時候我們主要測試了其參數retry_interval和status2.4.4.範例2.4.4.1.retry_interval參數的測試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結合使用的情況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::add2.5.1.說明bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] ) 添加一個要緩衝的資料如果作為這個緩衝的資料的鍵在伺服器上還不存在的情況下,2.5.2.參數key 快取資料的鍵 其長度不能超過250個字元var 值,整型將直接儲存,其他類型將被序列化儲存 ,其值最大為1Mflag 是否使用 zlib 壓縮 ,當flag=MEMCACHE_COMPRESSED的時侯,資料很小的時候不會採用zlib壓縮,只有資料達到一定大小才對資料進行zlib壓縮。(沒有具體的測試資料進行壓縮的最小值是多少)expire 到期時間,0 為永不到期,可使用 unix 時間戳記格式或距離目前時間的秒數,設為秒數時不能大於 2592000(30 天)2.5.3.傳回值成功返回 TRUE,失敗返回 FALSE,如果這個鍵已經存在,其他方面memcache:;add()的行為與memcache::set相似2.5.4.範例add(‘var_key‘, ‘test variable‘, FALSE, 30);?>2.6.Memcache::replace2.6.1.說明bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] )替換一個指定 已存在key 的的緩衝變數內容2.6.2.參數key 快取資料的鍵, 其長度不能超過250個字元var 值,整型將直接儲存,其他類型將被序列化儲存,其值最大為1Mflag 是否使用 zlib 壓縮 ,當flag=MEMCACHE_COMPRESSED的時侯,資料很小的時候不會採用zlib壓縮,只有資料達到一定大小才對資料進行zlib壓縮。(沒有具體的測試資料進行壓縮的最小值是多少)expire 到期時間,0 為永不到期,可使用 unix 時間戳記格式或距離目前時間的秒數,設為秒數時不能大於 2592000(30 天)2.6.3.傳回值成功返回 TRUE,失敗返回 FALSE。2.6.4.範例replace("test_key", "some variable", FALSE, 30);?>2.7.Memcache::set2.7.1.說明bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )設定一個指定 key 的緩衝變數內容2.7.2.參數key 快取資料的鍵, 其長度不能超過250個字元var 值,整型將直接儲存,其他類型將被序列化儲存,其值最大為1Mflag 是否使用 zlib 壓縮 ,當flag=MEMCACHE_COMPRESSED的時侯,資料很小的時候不會採用zlib壓縮,只有資料達到一定大小才對資料進行zlib壓縮。(沒有具體的測試資料進行壓縮的最小值是多少)expire 到期時間,0 為永不到期,可使用 unix 時間戳記格式或距離目前時間的秒數,設為秒數時不能大於 2592000(30 天)2.7.3.傳回值成功返回 TRUE,失敗返回 FALSE。2.7.4.範例connect(‘memcache_host‘, 11211);/*set value of item with key ‘var_key‘, using on-the-fly compressionexpire 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::get2.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.範例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 resultarray 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::delete2.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.範例connect(‘memcache_host‘, 11211);$memcache_obj->delete(‘key_to_delete‘, 10);?>2.10.Memcache::flush2.10.1.說明bool Memcache::flush ( void )清空所有緩衝內容,不是真的刪除緩衝的內容,只是使所有變數的緩衝到期,使記憶體中的內容被重寫2.10.2.傳回值成功返回 TRUE,失敗返回 FALSE。2.10.3.範例connect(‘memcache_host‘, 11211);$memcache_obj->flush();?>2.11.Memcache::getExtendedStats2.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.範例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::getStats2.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::getServerStatus2.13.1.說明int Memcache::getServerStatus ( string $host [, int $port ] )通過輸入的 host 及 port 來擷取相應的伺服器資訊2.13.2.參數host 伺服器網域名稱或 IPport 連接埠號碼,預設為 112112.13.3.傳回值返回伺服器狀態,0 為失敗,其他情況返回非 0 數字 2.13.4.範例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::getVersion2.14.1.說明string Memcache::getVersion ( void )擷取伺服器的版本號碼資訊 2.14.2.傳回值成功返回伺服器的版本號碼字串,失敗返回 FALSE 2.14.3.範例connect(‘memcache_host‘, 11211);echo $memcache->getVersion();/* procedural API */$memcache = memcache_connect(‘memcache_host‘, 11211);echo memcache_get_version($memcache);?>2.15.Memcache::setCompressThresholdbool 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.範例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::setServerParams2.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 伺服器網域名稱或 IPport 連接埠號碼,預設為 11211timeout 逾時串連失效的秒數,修改預設值 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.範例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::increment2.17.1.說明int Memcache::increment ( string $key [, int $value ] )給指定 key 的緩衝變數一個增值,如果該變數不是數字時不會被轉化為數字,這個增值將會加到該變數原有的數字之上,變數不存在不會新增變數,對於壓縮儲存的變數不要使用本函數因為相應的取值方法會失敗。 2.17.2.參數key 緩衝值的鍵var 值,整型將直接儲存,其他類型將被序列化儲存 2.17.3.傳回值成功返回新的變數值,失敗返回 FALSE。2.17.4.範例connect(‘memcache_host‘, 11211);/* increment counter by 3 */$current_value = $memcache_obj->increment(‘counter‘, 3);?>2.18.Memcache::decrement2.18.2.說明int Memcache::decrement ( string $key [, int $value ] )給指定 key 的緩衝變數一個遞減值,與 increment 操作類似,將在原有變數基礎上減去這個值,該項的值將會在轉化為數字後減去,新項的值不會小於 0,對於壓縮儲存的變數不要使用本函數因為相應的取值方法會失敗。 2.18.2.參數key 緩衝值的鍵var 值,整型將直接儲存,其他類型將被序列化儲存 2.18.3.傳回值成功返回新的變數值,失敗返回 FALSE。 2.18.4.範例connect(‘memcache_host‘, 11211);/* decrement item by 3 */$new_value = $memcache_obj->decrement(‘test_item‘, 3);?>2.19.memcache_debug2.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。ending
轉自:http://www.cnblogs.com/qiantuwuliang/archive/2011/03/07/1974499.html