2024 年 PHP Conference Japan

預定義常數

以下常數由此擴充功能定義,並且只有在擴充功能已編譯到 PHP 中或在執行階段動態載入時才會可用。

Memcached::OPT_COMPRESSION
啟用或停用有效負載壓縮。啟用後,長度超過特定閾值(目前為 2000 位元組)的項目值將在儲存期間壓縮,並在擷取期間透明地解壓縮。可以使用 memcached.compression_threshold ini 設定來設定閾值。

類型:布林值,預設值:true

Memcached::OPT_COMPRESSION_TYPE
指定在啟用壓縮的情況下使用的壓縮演算法。有效的演算法為 Memcached::COMPRESSION_FASTLZMemcached::COMPRESSION_ZLIB 以及 Memcached::COMPRESSION_ZSTD

類型:整數 (int),預設值:Memcached::COMPRESSION_FASTLZ

Memcached::COMPRESSION_FASTLZ
FASTLZ 壓縮演算法。
Memcached::COMPRESSION_ZLIB
ZLIB 壓縮演算法。
Memcached::COMPRESSION_ZSTD
ZSTD 壓縮演算法。Memcached 3.3.0 版本起可用。
Memcached::OPT_COMPRESSION_LEVEL
指定在啟用壓縮的情況下使用的壓縮等級。

類型:整數 (int),預設值:3

Memcached::OPT_SERIALIZER
指定用於序列化非純量值的序列化器。有效的序列化器為 Memcached::SERIALIZER_PHPMemcached::SERIALIZER_IGBINARYMemcached::SERIALIZER_JSONMemcached::SERIALIZER_JSON_ARRAY 以及 Memcached::SERIALIZER_MSGPACK

類型:整數 (int),預設值:如果可用則為 Memcached::SERIALIZER_IGBINARY,其次如果可用則為 Memcached::SERIALIZER_MSGPACK,最後則為 Memcached::SERIALIZER_PHP

Memcached::SERIALIZER_PHP

預設的 PHP 序列化器。

Memcached::SERIALIZER_IGBINARY
igbinary 序列化器。它以緊湊的二進位格式儲存 PHP 資料結構,而不是文字表示法,從而節省空間和時間。僅當 memcached 使用 --enable-memcached-igbinary 選項設定且載入了 igbinary 擴充功能時,才支援此序列化器。
Memcached::SERIALIZER_JSON

JSON 序列化器。此序列化器將 JSON 反序列化為物件。

Memcached::SERIALIZER_JSON_ARRAY
JSON 陣列序列化器。此序列化器將 JSON 反序列化為關聯式陣列。
Memcached::SERIALIZER_MSGPACK
» MessagePack 序列化器。僅當 memcached 使用 --enable-memcached-msgpack 選項設定且載入了 msgpack 擴充功能時,才支援此序列化器。
Memcached::OPT_PREFIX_KEY
這可以用於為您的項目鍵建立「網域」。這裡指定的值將作為每個鍵的前綴。它的長度不能超過 128 個字元,並且會減少可用的最大鍵大小。前綴僅套用於項目鍵,而不套用於伺服器鍵。

類型:字串 (string),預設值:""

Memcached::OPT_HASH
指定用於項目鍵值的雜湊演算法。有效值透過 Memcached::HASH_* 常數提供。每個雜湊演算法都有其優缺點。如果您不知道或不在意,請使用預設值。

類型:int,預設值:Memcached::HASH_DEFAULT

Memcached::HASH_DEFAULT

預設的(Jenkins 一次一個)項目鍵值雜湊演算法。

Memcached::HASH_MD5

MD5 項目鍵值雜湊演算法。

Memcached::HASH_CRC

CRC 項目鍵值雜湊演算法。

Memcached::HASH_FNV1_64

FNV1_64 項目鍵值雜湊演算法。

Memcached::HASH_FNV1A_64

FNV1_64A 項目鍵值雜湊演算法。

Memcached::HASH_FNV1_32

FNV1_32 項目鍵值雜湊演算法。

Memcached::HASH_FNV1A_32

FNV1_32A 項目鍵值雜湊演算法。

Memcached::HASH_HSIEH

Hsieh 項目鍵值雜湊演算法。

Memcached::HASH_MURMUR

Murmur 項目鍵值雜湊演算法。

Memcached::OPT_DISTRIBUTION
指定將項目鍵值分佈到伺服器的方法。目前支援的方法為模組運算和一致性雜湊。一致性雜湊提供更好的分佈,並允許將伺服器添加到叢集中,同時將快取損失降到最低。

類型:int,預設值:Memcached::DISTRIBUTION_MODULA

Memcached::DISTRIBUTION_MODULA

基於模組運算的鍵值分佈演算法。

Memcached::DISTRIBUTION_CONSISTENT

一致性雜湊鍵值分佈演算法(基於 libketama)。

Memcached::DISTRIBUTION_VIRTUAL_BUCKET
虛擬桶雜湊鍵值分佈演算法(也稱為 vbucket)。
Memcached::OPT_LIBKETAMA_COMPATIBLE

啟用或停用與 libketama 類似行為的相容性。啟用後,項目鍵值雜湊演算法將設定為 MD5,分佈將設定為加權一致性雜湊分佈。這很有用,因為其他具有相同伺服器配置的基於 libketama 的客戶端(Python、Ruby 等)將能夠透明地存取鍵值。

注意事項:

如果您要使用一致性雜湊,強烈建議啟用此選項,並且在未來的版本中可能會預設啟用。

類型:bool,預設值:false

Memcached::OPT_LIBKETAMA_HASH
指定主機映射的雜湊演算法。

類型:int

Memcached::OPT_TCP_KEEPALIVE
啟用 TCP 保持連線。

類型:bool,預設值:false

Memcached::OPT_BUFFER_WRITES
啟用或停用緩衝 I/O。啟用緩衝 I/O 會導致儲存命令被「緩衝」,而不是被發送。任何擷取資料的操作都會導致此緩衝區被發送到遠端連線。退出連線或關閉連線也會導致緩衝資料被推送至遠端連線。

類型:bool,預設值:false

Memcached::OPT_BINARY_PROTOCOL
啟用二進位協定。請注意,您無法在開啟的連線上切換此選項。

類型:bool,預設值:false

Memcached::OPT_NO_BLOCK
啟用或停用非同步 I/O。這是儲存函式可用的最快傳輸方式。

類型:bool,預設值:false

Memcached::OPT_NOREPLY
啟用或停用忽略儲存命令(設定、新增、取代、附加、前置、刪除、遞增、遞減等)的結果。儲存命令將在不花時間等待回覆的情況下發送(不會有回覆)。諸如 Memcached::get() 之類的擷取命令不受此設定的影響。

類型:bool,預設值:false

Memcached::OPT_TCP_NODELAY
為連線通訊端啟用或停用無延遲功能(在某些環境中可能會更快)。

類型:bool,預設值:false

Memcached::OPT_SOCKET_SEND_SIZE
最大通訊端發送緩衝區大小(以位元組為單位)。

類型:整數 (int),預設值:依平台/核心設定而異。

Memcached::OPT_SOCKET_RECV_SIZE
最大 Socket 接收緩衝區大小,單位為位元組。

類型:整數 (int),預設值:依平台/核心設定而異。

Memcached::OPT_CONNECT_TIMEOUT
在非阻塞模式下,設定 Socket 連線時的逾時值,單位為毫秒。

類型:整數 (int),預設值:1000

Memcached::OPT_RETRY_TIMEOUT
重試失敗的連線嘗試前的等待時間,單位為秒。

類型:整數 (int),預設值:2

Memcached::OPT_DEAD_TIMEOUT
重試失效伺服器前的等待時間,單位為秒。0 表示不重試。

類型:整數 (int),預設值:0

Memcached::OPT_SEND_TIMEOUT
Socket 傳送逾時,單位為微秒。在無法使用非阻塞 I/O 的情況下,這允許您在傳送數據時仍然設定逾時。

類型:整數 (int),預設值:0

Memcached::OPT_RECV_TIMEOUT
Socket 讀取逾時,單位為微秒。在無法使用非阻塞 I/O 的情況下,這允許您在讀取數據時仍然設定逾時。

類型:整數 (int),預設值:0

Memcached::OPT_POLL_TIMEOUT
連線輪詢逾時,單位為毫秒。

類型:整數 (int),預設值:1000

Memcached::OPT_CACHE_LOOKUPS
啟用或停用 DNS 查詢快取。

類型:bool,預設值:false

Memcached::OPT_SERVER_FAILURE_LIMIT
指定伺服器連線嘗試的失敗次數上限。在此連續連線失敗次數之後,伺服器將被移除。

類型:整數 (int),預設值:5

Memcached::OPT_SERVER_TIMEOUT_LIMIT
指定伺服器連線嘗試的逾時次數上限。在此連續連線逾時次數之後,伺服器將被移除。

類型:整數 (int),預設值:0

Memcached::OPT_AUTO_EJECT_HOSTS

從列表中移除停用的伺服器。與 Memcached::OPT_SERVER_FAILURE_LIMITMemcached::OPT_SERVER_TIMEOUT_LIMIT 一起使用。

注意事項:

此選項已被 Memcached::OPT_REMOVE_FAILED_SERVERS 取代。

類型:bool,預設值:false

Memcached::OPT_VERIFY_KEY
啟用 memcached 的鍵值驗證。

類型:bool,預設值:false

Memcached::OPT_USE_UDP
使用 UDP 取代 TCP。

類型:bool,預設值:false

Memcached::OPT_NUMBER_OF_REPLICAS
在不同的伺服器上儲存每個項目的複本數量。

類型:整數 (int),預設值:0

Memcached::OPT_RANDOMIZE_REPLICA_READS
隨機選擇複本讀取伺服器。

類型:bool,預設值:false

Memcached::OPT_REMOVE_FAILED_SERVERS
從列表中移除停用的伺服器。與 Memcached::OPT_SERVER_FAILURE_LIMITMemcached::OPT_SERVER_TIMEOUT_LIMIT 一起使用。

類型:bool,預設值:false

Memcached::HAVE_IGBINARY
指示 igbinary 序列化器支援是否可用。

類型:布林值 (bool)

Memcached::HAVE_JSON
指示 JSON 序列化器支援是否可用。

類型:布林值 (bool)

Memcached::HAVE_MSGPACK
指示 MessagePack 序列化器支援是否可用。

類型:布林值 (bool)

Memcached 3.0.0 版起可用。

Memcached::HAVE_ZSTD
指示 ZSTD 壓縮支援是否可用。

類型:布林值 (bool)

Memcached 3.3.0 版起可用。

Memcached::HAVE_ENCODING
指示是否支援使用 Memcached::setEncodingKey() 進行數據加密。

類型:布林值 (bool)

Memcached 3.1.0 版起可用。

Memcached::HAVE_SESSION

類型:布林值 (bool)

Memcached 3.0.0 版起可用。

Memcached::HAVE_SASL

類型:布林值 (bool)

Memcached 3.0.0 版起可用。

Memcached::GET_EXTENDED

用於 Memcached::get()Memcached::getMulti()Memcached::getMultiByKey() 的旗標,確保也返回 CAS 權杖值。

Memcached 3.0.0 版起可用。

Memcached::GET_PRESERVE_ORDER

用於 Memcached::getMulti()Memcached::getMultiByKey() 的旗標,確保以請求的相同順序返回鍵值。不存在的鍵會得到預設值 null

Memcached::RES_SUCCESS

操作成功。

Memcached::RES_FAILURE

操作失敗。

Memcached::RES_HOST_LOOKUP_FAILURE

DNS 查詢失敗。

Memcached::RES_UNKNOWN_READ_FAILURE

讀取網路資料失敗。

Memcached::RES_PROTOCOL_ERROR

Memcached 協定中的錯誤指令。

Memcached::RES_CLIENT_ERROR

用戶端錯誤。

Memcached::RES_SERVER_ERROR

伺服器端錯誤。

Memcached::RES_WRITE_FAILURE

寫入網路資料失敗。

Memcached::RES_DATA_EXISTS

比較並交換操作失敗:您嘗試儲存的項目自您上次擷取後已被修改。

Memcached::RES_NOTSTORED

項目未儲存,但並非因為錯誤。這通常表示未滿足「新增」或「取代」指令的條件,或者項目位於刪除佇列中。

Memcached::RES_NOTFOUND

找不到具有此鍵的項目(使用「get」操作或「cas」操作)。

Memcached::RES_PARTIAL_READ

網路資料讀取錯誤(部分)。

Memcached::RES_SOME_ERRORS

在多重擷取期間發生一些錯誤。

Memcached::RES_NO_SERVERS

伺服器清單為空。

Memcached::RES_END

結果集的結尾。

Memcached::RES_ERRNO

系統錯誤。

Memcached::RES_BUFFERED

操作已緩衝。

Memcached::RES_TIMEOUT

操作逾時。

Memcached::RES_BAD_KEY_PROVIDED

錯誤的鍵值。

Memcached::RES_STORED
項目已儲存。
Memcached::RES_DELETED
項目已刪除。
Memcached::RES_STAT
統計資料。
Memcached::RES_ITEM
項目。
Memcached::RES_NOT_SUPPORTED
不支援。
Memcached::RES_FETCH_NOTFINISHED
擷取尚未完成。
Memcached::RES_SERVER_MARKED_DEAD
伺服器標記為失效。
Memcached::RES_UNKNOWN_STAT_KEY
未知的統計鍵值。
Memcached::RES_INVALID_HOST_PROTOCOL
無效的主機協定。
Memcached::RES_MEMORY_ALLOCATION_FAILURE
記憶體配置失敗。
Memcached::RES_CONNECTION_SOCKET_CREATE_FAILURE

建立網路通訊端失敗。

Memcached::RES_PAYLOAD_FAILURE

Payload 失敗:無法壓縮/解壓縮或序列化/反序列化值。

Memcached::RES_AUTH_PROBLEM

Memcached 3.0.0 版起可用。

Memcached::RES_AUTH_FAILURE

Memcached 3.0.0 版起可用。

Memcached::RES_AUTH_CONTINUE

Memcached 3.0.0 版起可用。

Memcached::RES_E2BIG

Memcached 3.0.0 版起可用。

Memcached::RES_KEY_TOO_BIG

Memcached 3.0.0 版起可用。

Memcached::RES_SERVER_TEMPORARILY_DISABLED

Memcached 3.0.0 版起可用。

Memcached::RES_SERVER_MEMORY_ALLOCATION_FAILURE

Memcached 3.0.0 版起可用。

新增註釋

使用者貢獻筆記 5 則筆記

tyliu2 at gmail dot com
14 年前
RES_SUCCESS = 0
RES_FAILURE = 1
RES_HOST_LOOKUP_FAILURE = 2
RES_UNKNOWN_READ_FAILURE = 7
RES_PROTOCOL_ERROR = 8
RES_CLIENT_ERROR = 9
RES_SERVER_ERROR = 10
RES_WRITE_FAILURE = 5
RES_DATA_EXISTS = 12
RES_NOTSTORED = 14
RES_NOTFOUND = 16
RES_PARTIAL_READ = 18
RES_SOME_ERRORS = 19
RES_NO_SERVERS = 20
RES_END = 21
RES_ERRNO = 26
RES_BUFFERED = 32
RES_TIMEOUT = 31
RES_BAD_KEY_PROVIDED = 33
RES_CONNECTION_SOCKET_CREATE_FAILURE = 11
RES_PAYLOAD_FAILURE = -1001
igorsantos07 no gmail
8 年前
根據 StackOverflow 上 @rid 的回答 (http://stackoverflow.com/a/9042985/102960,),以下是目前 Memcached 回應常數的列表

00 = MEMCACHED_SUCCESS
01 = MEMCACHED_FAILURE
02 = MEMCACHED_HOST_LOOKUP_FAILURE // 僅限 getaddrinfo() 和 getnameinfo()
03 = MEMCACHED_CONNECTION_FAILURE
04 = MEMCACHED_CONNECTION_BIND_FAILURE // 已棄用,請參閱 MEMCACHED_HOST_LOOKUP_FAILURE
05 = MEMCACHED_WRITE_FAILURE
06 = MEMCACHED_READ_FAILURE
07 = MEMCACHED_UNKNOWN_READ_FAILURE
08 = MEMCACHED_PROTOCOL_ERROR
09 = MEMCACHED_CLIENT_ERROR
10 = MEMCACHED_SERVER_ERROR // 伺服器返回 "SERVER_ERROR"
11 = MEMCACHED_ERROR // 伺服器返回 "ERROR"
12 = MEMCACHED_DATA_EXISTS
13 = MEMCACHED_DATA_DOES_NOT_EXIST
14 = MEMCACHED_NOTSTORED
15 = MEMCACHED_STORED
16 = MEMCACHED_NOTFOUND
17 = MEMCACHED_MEMORY_ALLOCATION_FAILURE
18 = MEMCACHED_PARTIAL_READ
19 = MEMCACHED_SOME_ERRORS
20 = MEMCACHED_NO_SERVERS
21 = MEMCACHED_END
22 = MEMCACHED_DELETED
23 = MEMCACHED_VALUE
24 = MEMCACHED_STAT
25 = MEMCACHED_ITEM
26 = MEMCACHED_ERRNO
27 = MEMCACHED_FAIL_UNIX_SOCKET // 已棄用
28 = MEMCACHED_NOT_SUPPORTED
29 = MEMCACHED_NO_KEY_PROVIDED /* 已棄用。請使用 MEMCACHED_BAD_KEY_PROVIDED! */
30 = MEMCACHED_FETCH_NOTFINISHED
31 = MEMCACHED_TIMEOUT
32 = MEMCACHED_BUFFERED
33 = MEMCACHED_BAD_KEY_PROVIDED
34 = MEMCACHED_INVALID_HOST_PROTOCOL
35 = MEMCACHED_SERVER_MARKED_DEAD
36 = MEMCACHED_UNKNOWN_STAT_KEY
37 = MEMCACHED_E2BIG
38 = MEMCACHED_INVALID_ARGUMENTS
39 = MEMCACHED_KEY_TOO_BIG
40 = MEMCACHED_AUTH_PROBLEM
41 = MEMCACHED_AUTH_FAILURE
42 = MEMCACHED_AUTH_CONTINUE
43 = MEMCACHED_PARSE_ERROR
44 = MEMCACHED_PARSE_USER_ERROR
45 = MEMCACHED_DEPRECATED
46 = MEMCACHED_IN_PROGRESS
47 = MEMCACHED_SERVER_TEMPORARILY_DISABLED
48 = MEMCACHED_SERVER_MEMORY_ALLOCATION_FAILURE
49 = MEMCACHED_MAXIMUM_RETURN /* 新增錯誤代碼請務必加在此之前 */
11 = MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE = MEMCACHED_ERROR
匿名
7 年前
請注意,啟用 Memcached::OPT_BINARY_PROTOCOL 後,在 TCP 層級會增加一些(可能相當大的)大小額外負擔。

如果您有大量的少量值正在進行讀取/設定,您應該在啟用此選項之前,使用網路工具(例如 tcpdump)分析此選項對整體流量大小的影響,尤其是在您需要為 memcache 執行個體的流量支付費用的情況下。
akenney at onesite dot com
13 年前
顯然 libmemcached 中存在一個錯誤,當同時設定 OPT_NO_BLOCK 時,連線逾時功能無法正常運作。

此錯誤和相關的阻塞錯誤在此處討論
https://bugs.launchpad.net/libmemcached/+bug/583031

我們在 libmemcached 0.43 版中確認了這一點

請務必測試您的 memcache 池中某些伺服器不可用的情況(例如無路由到主機以及 memcache 服務關閉),以確保逾時設定正常運作。
Allen Tsai
13 年前
Memcached::OPT_SERVER_FAILURE_LIMIT - 一旦伺服器達到此限制,用戶端的 getResultMessage() 將會回傳「伺服器已標記為失效 (SERVER IS MARKED DEAD)」。後續針對雜湊到此伺服器的鍵進行 gets() 操作將會持續回傳此訊息,sets() 操作亦然。

2.0.01b 版支援常數 Memcached::OPT_AUTO_EJECT_HOSTS,可允許叢集自動重新平衡/自動故障轉移處理。
To Top