PHP Conference Japan 2024

Memcached::set

(PECL memcached >= 0.1.0)

Memcached::set儲存項目

說明

public Memcached::set(字串 $key, 混合 $value, 整數 $expiration = 0): 布林值

Memcached::set()value 以指定的 key 儲存在 memcache 伺服器上。 expiration 參數可用於控制值何時過期。

值可以是任何有效的 PHP 類型,除了資源之外,因為資源無法以序列化形式表示。 如果 Memcached::OPT_COMPRESSION 選項已開啟,則序列化值在儲存之前也會被壓縮。

參數

key

用於儲存值的鍵值。

value

要儲存的值。

有效期限

有效期限,預設為 0。更多資訊請參考 有效期限

回傳值

成功時回傳 true,失敗則回傳 false。如有需要,請使用 Memcached::getResultCode()

範例

範例 #1 Memcached::set() 範例

<?php
$m
= new Memcached();
$m->addServer('localhost', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* 設定 'object' 鍵的有效期限為 5 分鐘 */
$m->set('object', new stdClass, time() + 300);


var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
?>

上述範例的輸出結果會類似如下:

int(99)
string(15) "a simple string"
array(2) {
  [0]=>
  int(11)
  [1]=>
  int(12)
}
object(stdClass)#1 (0) {
}

另請參閱

新增註解

使用者貢獻的註解 5 則註解

HaxxxxaH
8 年前
@PeterN

您說這個是錯的
$m->set('object', new stdclass, time() + 300);

而正確的寫法應該是這個
$m->set('object', new stdclass, 300);

實際上,兩種作法都正確。有效期限的計算方式如下:如果給定的時間數值小於或等於 30 天 (60 * 60 * 24 * 30 = 2,592,000),則它會在這麼多秒後過期。如果數值大於 30 天,則它會在該 UNIX 時間戳記過期。
PeterN
9 年前
範例中顯示

/* 將 'object' 鍵的有效期限設定為 5 分鐘 */
$m->set('object', new stdclass, time() + 300);

但這是錯誤的。
它不會過期,至少在很長一段時間內不會。
因此,不要使用 time() + 秒數,而應該使用
$m->set('object', new stdclass, 300);
這樣它就會在 5 分鐘後正確過期。

備註:使用透過 PECL 安裝的 Memcached 2.1.0 穩定版。
Matthew Minix
11 年前
與 Memcache 不同,Memcached 不會自動將鍵中的空格替換為底線,而是會直接傳送提供的鍵,這會導致錯誤,進而造成鍵和值不匹配。您可以透過在儲存前移除/替換空格或將選項 Memcached::OPT_BINARY_PROTOCOL 設定為 true 來避免此問題。
匿名
10 年前
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(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(連線 Socket 建立失敗 = 錯誤)
miha at hribar dot info
15 年前
如果將值設定為 false,則此方法會正確返回 false。這表示為了建立正確的錯誤檢查機制,您需要檢查結果代碼。

<?php
$Memcached
= new Memcached();
$Memcached->addServer('localhost', 11211);
$Memcached->set('key', false);
var_dump($Memcached->get('key')); // 布林值 false
var_dump($Memcached->getResultCode()); // 整數 0,也就是 Memcached::RES_SUCCESS
?>
To Top