跳到內容

Memcached 快取配接器

編輯此頁

此配接器使用一個(或多個)Memcached 伺服器實例,將值儲存在記憶體中。與 APCu 配接器不同,且與 Redis 配接器類似,它不受限於目前伺服器的共享記憶體;您可以獨立於 PHP 環境儲存內容。亦可使用伺服器叢集來提供冗餘和/或故障轉移。

警告

需求: 必須安裝、啟用並執行 Memcached PHP 擴充套件 以及 Memcached 伺服器,才能使用此配接器。此配接器需要 Memcached PHP 擴充套件2.2 或更高版本。

此配接器預期將 Memcached 實例作為第一個參數傳遞。命名空間和預設快取生命週期可以選擇性地作為第二個和第三個參數傳遞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Symfony\Component\Cache\Adapter\MemcachedAdapter;

$cache = new MemcachedAdapter(
    // the client object that sets options and adds the server instance(s)
    \Memcached $client,

    // a string prefixed to the keys of the items stored in this cache
    $namespace = '',

    // the default lifetime (in seconds) for cache items that do not define their
    // own lifetime, with a value 0 causing items to be stored indefinitely (i.e.
    // until MemcachedAdapter::clear() is invoked or the server(s) are restarted)
    $defaultLifetime = 0
);

設定連線

createConnection() 輔助方法允許使用 資料來源名稱 (DSN) 或 DSN 陣列來建立和設定 Memcached 類別實例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use Symfony\Component\Cache\Adapter\MemcachedAdapter;

// pass a single DSN string to register a single server with the client
$client = MemcachedAdapter::createConnection(
    'memcached://127.0.0.1'
    // the DSN can include config options (pass them as a query string):
    // 'memcached://127.0.0.1:11222?retry_timeout=10'
    // 'memcached://127.0.0.1:11222?socket_recv_size=1&socket_send_size=2'
);

// pass an array of DSN strings to register multiple servers with the client
$client = MemcachedAdapter::createConnection([
    'memcached://10.0.0.100',
    'memcached://10.0.0.101',
    'memcached://10.0.0.102',
    // etc...
]);

// a single DSN can define multiple servers using the following syntax:
// host[hostname-or-IP:port] (where port is optional). Sockets must include a trailing ':'
$client = MemcachedAdapter::createConnection(
    'memcached:?host[localhost]&host[localhost:12345]&host[/some/memcached.sock:]=3'
);

此配接器的 資料來源名稱 (DSN) 必須使用以下格式

1
memcached://[user:pass@][ip|host|socket[:port]][?weight=int]

DSN 必須包含 IP/主機(和選用的埠)或 socket 路徑、選用的使用者名稱和密碼(用於 SASL 驗證;它需要 memcached 擴充套件在編譯時使用 --enable-memcached-sasl)和選用的權重(用於在叢集中優先處理伺服器;其值是介於 0100 之間的整數,預設為 null;值越高表示優先順序越高)。

以下是有效 DSN 的常見範例,顯示了可用值的組合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Symfony\Component\Cache\Adapter\MemcachedAdapter;

$client = MemcachedAdapter::createConnection([
    // hostname + port
    'memcached://my.server.com:11211'

    // hostname without port + SASL username and password
    'memcached://rmf:abcdef@localhost'

    // IP address instead of hostname + weight
    'memcached://127.0.0.1?weight=50'

    // socket instead of hostname/IP + SASL username and password
    'memcached://janesmith:mypassword@/var/run/memcached.sock'

    // socket instead of hostname/IP + weight
    'memcached:///var/run/memcached.sock?weight=20'
]);

設定選項

createConnection() 輔助方法也接受選項陣列作為其第二個引數。預期的格式是 key => value 配對的關聯陣列,代表選項名稱及其各自的值

1
2
3
4
5
6
7
8
9
10
11
12
use Symfony\Component\Cache\Adapter\MemcachedAdapter;

$client = MemcachedAdapter::createConnection(
    // a DSN string or an array of DSN strings
    [],

    // associative array of configuration options
    [
        'libketama_compatible' => true,
        'serializer' => 'igbinary',
    ]
);

可用選項

auto_eject_hosts (類型:bool,預設:false)
啟用或停用叢集的恆定、自動重新平衡,方法是自動移除超出設定的 server_failure_limit 的主機。
buffer_writes (類型:bool,預設:false)
啟用或停用緩衝輸入/輸出操作,導致儲存命令緩衝,而不是立即傳送到遠端伺服器。任何檢索資料、結束連線或關閉連線的動作都會導致緩衝區被提交。
connect_timeout (類型:int,預設:1000)

指定啟用 no_block 選項時,socket 連線操作的逾時時間(以毫秒為單位)。

有效選項值包括任何正整數

distribution (類型:string,預設:consistent)

指定伺服器之間項目金鑰的分發方法。一致性雜湊提供更好的分發,並允許將伺服器新增到叢集中,同時將快取遺失降到最低。

有效選項值包括 modulaconsistentvirtual_bucket

hash (類型:string,預設:md5)

指定用於項目金鑰的雜湊演算法。每個雜湊演算法都有其優點和缺點。建議預設值以與其他用戶端相容。

有效選項值包括 defaultmd5crcfnv1_64fnv1a_64fnv1_32fnv1a_32hsiehmurmur

libketama_compatible (類型:bool,預設:true)
啟用或停用「libketama」相容行為,使其他基於 libketama 的用戶端能夠透明地存取用戶端實例儲存的金鑰(例如 Python 和 Ruby)。啟用此選項會將 hash 選項設定為 md5,並將 distribution 選項設定為 consistent
no_block (類型:bool,預設:true)
啟用或停用非同步輸入和輸出操作。這是儲存功能可用的最快傳輸選項。
number_of_replicas (類型:int,預設:0)

指定每個項目應儲存的副本數(在不同的伺服器上)。這不會指定某些 memcached 伺服器來儲存副本,而是將副本與所有其他物件一起儲存(在註冊的「n」個下一個伺服器上)。

有效選項值包括任何正整數

prefix_key (類型:string,預設:空字串)

指定前置於金鑰的「網域」(或「命名空間」)。它不能超過 128 個字元,並會縮減金鑰的最大大小。

有效選項值包括任何字母數字字串

poll_timeout (類型:int,預設:1000)

指定在 socket 輪詢操作期間逾時之前的時間量(以秒為單位)。

有效選項值包括任何正整數

randomize_replica_read (類型:bool,類型:false)
啟用或停用副本讀取起點的隨機化。通常,讀取是從主要伺服器完成的,如果未命中,則讀取是從「主要 + 1」完成,然後是「主要 + 2」,一直到「n」個副本。此選項將副本讀取設定為在所有可用伺服器之間隨機化;它允許將讀取負載分發到多個伺服器,但會增加寫入流量。
recv_timeout (類型:int,預設:0)

指定在傳出 socket(讀取)操作期間逾時之前的時間量(以微秒為單位)。當未啟用 no_block 選項時,這仍允許您在讀取資料時設定逾時。

有效選項值包括 0任何正整數

retry_timeout (類型:int,預設:0)

指定在逾時和重試連線嘗試之前的時間量(以秒為單位)。

有效選項值包括任何正整數

send_timeout (類型:int,預設:0)

指定在傳入 socket(傳送)操作期間逾時之前的時間量(以微秒為單位)。當未啟用 no_block 選項時,這仍允許您在傳送資料時設定逾時。

有效選項值包括 0任何正整數

serializer (類型:string,預設:php)

指定用於序列化非純量值的序列化程式。igbinary 選項需要啟用 igbinary PHP 擴充套件,以及 memcached 擴充套件已編譯為支援它。

有效選項值包括 phpigbinary

server_failure_limit (類型:int,預設:0)

指定伺服器連線嘗試的失敗限制,然後將伺服器標記為「死機」。除非啟用 auto_eject_hosts,否則伺服器將保留在伺服器池中。

有效選項值包括任何正整數

socket_recv_size (類型:int)

指定傳入(接收)socket 連線資料內容中的最大緩衝區大小(以位元組為單位)。

有效選項值包括任何正整數,預設值因平台和核心組態而異

socket_send_size (類型:int)

指定傳出(傳送)socket 連線資料內容中的最大緩衝區大小(以位元組為單位)。

有效選項值包括任何正整數,預設值因平台和核心組態而異

tcp_keepalive (類型:bool,預設:false)
啟用或停用 "`keep-alive`_" 傳輸控制協定 (TCP) 功能,此功能有助於判斷另一端是否已停止回應,方法是在閒置一段時間後傳送探測到網路對等點,並根據回應(或缺乏回應)關閉或持續連線 socket。
tcp_nodelay (類型:bool,預設:false)
啟用或停用 "`no-delay`_" (Nagle 演算法) 傳輸控制協定 (TCP) 演算法,這是一種旨在透過組合多個小型傳出訊息並一次全部傳送,來提高網路效率並減少 TCP 標頭額外負荷的機制。
use_udp (類型:bool,預設:false)

啟用或停用 使用者資料包協定 (UDP) 模式(而不是 傳輸控制協定 (TCP) 模式),其中所有操作都以「即發即忘」的方式執行;一旦用戶端執行操作,就不會嘗試確保操作已收到或已執行。

警告

並非所有程式庫操作都在此模式下測試。不允許混合 TCP 和 UDP 伺服器。

verify_key (類型:bool,預設:false)
啟用或停用測試和驗證所有使用的金鑰,以確保它們有效並符合正在使用的協定設計。

提示

參考 Memcached 擴充套件的預定義常數文件,以取得有關可用選項的其他資訊。

本作品,包括程式碼範例,依據 Creative Commons BY-SA 3.0 授權條款授權。
目錄
    版本