【原創】我的 memcache 筆記

這兩天在學習 memcache,手冊裏都是英文的,我自己翻譯了一下,水平有限,希望高手給予斧正,謝謝先!


Memcache Functions 函數參考

============================================================

簡介

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

 

  Memcache 模塊也提供用於通信對話(session handler)的處理。

 

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

------------------------------------------------------------

需求

  這個模塊所使用的函數包括以 zlib 進行壓縮,所以 Zlib 必須安裝。

  PHP 4.3.3 或更高版本纔可使用 memcache 擴展。

------------------------------------------------------------

安裝

  本 PECL(PHP 擴展公共庫) 擴展未綁定於 PHP 中。 安裝此 PECL 擴展庫的信息可在手冊中標題爲 PECL 擴展庫安裝的一章中找到。 更多信息如新版本,下載,源文件,維護者信息以及更新日誌等可以在這裏找到: » http://pecl.php.net/package/memcache.

 

  爲了使用這些函數你必須編譯 PHP 時使用 --enable-memcache[=DIR] 選項來獲得 Memcache 支持。

  你可以使用選項 --disable-memcache-session 來禁用通信對話的處理(session handler)功能。

 

  Windows 用戶可以在 php.ini 中增加 php_memcache.dll 擴展來使用這些相關函數。可以從 » PHP 下載頁面或者 » http://snaps.php.net/ 下載此 PECL 擴展的 DLL 文件。

------------------------------------------------------------

運行時配置

  這些函數的行爲受 php.ini 的影響。

 

Memcache 配置項列表

 

名稱                             默認值        是否可變           改變日誌

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.ini 配置選項。

 

以下是配置選項的簡要解釋。

 

memcache.allow_failover boolean

  是否在錯誤時將明顯的故障轉移到其他服務器上處理。

  Whether to transparently failover to other servers on errors.

 

memcache.max_failover_attempts integer

  定義嘗試多少個服務器來進行設置和獲取數據。只用於聯合 memcache.allow_failover 一同使用。

  Defines how many servers to try when setting and getting data. Used only in conjunction with memcache.allow_failover.

 

memcache.chunk_size integer

  數據將會被分成指定大小的塊來傳輸設置這個值越小將請求越多的網絡寫操作。如果提示其他無法說明的減速請將這個值設置爲 32768。

  Data will be transferred in chunks of this size, setting the value lower requires more network writes. Try increasing this value to 32768 if noticing otherwise inexplicable slowdowns.

 

memcache.default_port string

  連接 memcached 服務器時如果沒有指定其他端口時使用的默認的 TCP 端口號

  The default TCP port number to use when connecting to the memcached server if no other port is specified.

 

memcache.hash_strategy string

  控制在映射 key 到服務器時使用哪種策略。設置這個值一致來使一致的 hash 算法使用於服務器接受添加或者刪除池中變量時將被無條件的重新映射。設置這個值以標準的結果在舊的策略被使用時。

  Controls which strategy to use when mapping keys to servers. Set this value to consistent to enable consistent hashing which allows servers to be added or removed from the pool without causing keys to be remapped. Setting this value to standard results in the old strategy being used.

 

memcache.hash_function string

  控制哪種 hsah 函數被應用於映射 key 到服務器過程中默認值crc32使用 CRC32 算法fnv則表示使用 FNV-1a 算法。

  Controls which hash function to apply when mapping keys to servers, crc32 uses the standard CRC32 hash while fnv uses FNV-1a.

 

session.save_handler string

  設置這個值來確定是否使用 memcache 用於通信對話的處理session handler

  Use memcache as a session handler by setting this value to memcache.

 

session.save_path string

  定義各服務器鏈接存儲於通信對話單元時的分隔符號例如tcp://host1:11211, tcp://host2:11211

  Defines a comma separated of server urls to use for session storage, for example "tcp://host1:11211, tcp://host2:11211".

 

  每個鏈接可以包含被接受於該服務器的參數比較類似使用 Memcache::addServer() 來添加的服務器例如tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15

  Each url may contain parameters which are applied to that server, they are the same as for the Memcache::addServer() method. For example "tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

------------------------------------------------------------

資源類型

  只有一種資源類型被應用於 memcache 模塊那就是對緩存服務器連接的鏈接標識符。

  There is only one resource type used in memcache module - it's the link identifier for a cache server connection.

------------------------------------------------------------

預定義常量

Memcache Constants

Name                                 Description

MEMCACHE_COMPRESSED (integer)        用於調整在使用 Memcache::set(), Memcache::add()  Memcache::replace() 幾個函數時的壓縮比率。

MEMCACHE_HAVE_SESSION (integer)      如果通信對話的處理session handler被允許使用值爲 1其他情況值爲 0

 


 

Memcache Functions 函數列表

============================================================

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

  連接服務器

------------------------------------------------------------

參數

host               服務器域名或 IP

port              端口號,默認爲 11211

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

<?php

/* procedural API */

$memcache_obj = memcache_connect('memcache_host', 11211);

 

/* OO API */

$memcache = new Memcache;

$memcache->connect('memcache_host', 11211);

?>

============================================================

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

  以常連接方式連接服務器

------------------------------------------------------------

參數

host               服務器域名或 IP

port               端口號,默認爲 11211

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

<?php

/* procedural API */

$memcache_obj = memcache_pconnect('memcache_host', 11211);

 

/* OO API */

$memcache_obj = new Memcache;

$memcache_obj->pconnect('memcache_host', 11211);

?>

============================================================

bool Memcache::close ( void )

  關閉對象

------------------------------------------------------------

返回值

  成功返回 TRUE失敗返回 FALSE

------------------------------------------------------------

範例

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

?>

============================================================

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

  向對象添加一個服務器

------------------------------------------------------------

參數

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

添加一個要緩存的變量

------------------------------------------------------------

參數

key               

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

flag               是否使用 zlib 壓縮

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

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

------------------------------------------------------------

參數

key               

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

flag               是否使用 zlib 壓縮

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

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

------------------------------------------------------------

參數

key               

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

flag               是否使用 zlib 壓縮

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

*/

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

?>

============================================================

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

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

  獲取某個 key 的變量緩存值

------------------------------------------------------------

參數

key               

flags              如果是傳址某個變量,結果將被存於該變量

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

 

/* OO API */

$memcache_obj = new Memcache;

$memcache_obj->connect('memcache_host', 11211);

$var = $memcache_obj->get(Array('some_key', 'second_key'));

?>

============================================================

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

刪除某一個變量的緩存

------------------------------------------------------------

參數

key               

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

bool Memcache::flush ( void )

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

------------------------------------------------------------

返回值

  成功返回 TRUE失敗返回 FALSE

------------------------------------------------------------

範例

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

?>

============================================================

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

  獲取服務器擴展靜態信息

------------------------------------------------------------

參數

type               靜態信息類型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定規則協議這個可選參數是爲了方便開發人員查看不同類別的信息而輸入的標題

slabid             用於按指定類型聯合設置 cache 堆爲有效的片到堆中。緩存堆被被命令綁定到服務器上並被嚴格的用於調試用途

limit              用於按指定類型聯合設置 cache 堆爲輸入的數字所限制的大小到堆,默認值爲 100

------------------------------------------------------------

返回值

  返回一個由兩個一定格式的數組組成的服務器擴展靜態信息數組,失敗時返回 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] => FALSE

)

============================================================

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

  獲取服務器靜態信息

------------------------------------------------------------

參數

type               靜態信息類型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定規則協議這個可選參數是爲了方便開發人員查看不同類別的信息而輸入的標題

slabid             用於按指定類型聯合設置 cache 堆爲有效的片到堆中。緩存堆被被命令綁定到服務器上並被嚴格的用於調試用途

limit              用於按指定類型聯合設置 cache 堆爲輸入的數字所限制的大小到堆,默認值爲 100

------------------------------------------------------------

返回值

  返回一個由兩個一定格式的數組組成的服務器靜態信息數組,失敗時返回 FALSE

============================================================

int Memcache::getServerStatus ( string $host [, int $port ] )

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

------------------------------------------------------------

參數

host               服務器域名或 IP

port               端口號,默認爲 11211

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

string Memcache::getVersion ( void )

  獲取服務器的版本號信息

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

  設置壓縮極限

------------------------------------------------------------

參數

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

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

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

------------------------------------------------------------

參數

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

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

------------------------------------------------------------

參數

key               

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

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

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

------------------------------------------------------------

參數

key               

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

------------------------------------------------------------

返回值

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

------------------------------------------------------------

範例

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

?>

============================================================

bool memcache_debug ( bool $on_off )

  設置 memcache 的調試器是否開啓值爲 TRUE  FALSE

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

------------------------------------------------------------

參數

on_off             設置調試模式是否開啓TRUE 爲開啓FALSE 爲關閉

------------------------------------------------------------

返回值

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

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章