這只是關於 memcache 的兩個小問題,可能不太清楚,關於鍵和資料大小的限制,以及 memcache 協定中 flag 的作用。
* 最大鍵大小為 250,任何更大的鍵都會被截斷。資料也有一個 (1MB - 42 位元組) 的限制。
* 在 memcache 協定中,有一個 16 位元,較新版本中為 32 位元的 flag,您可以將其設定為任何您想要的值,因為 memcache 不會對 flag 進行任何操作。php api 不允許您取得 flag,因為 php 使用 flag 來進行 php 自己的用途,例如 "MEMCACHE_COMPRESSED",我決定測試它是否正在執行某些操作,因為它不是 memcache 協定的一部分。
<?php
$memcache = new Memcache();
$memcache->connect("127.0.0.1", 11211);
echo "*** 截斷鍵值測試 ***<br>";
echo "設定 251: " . ($memcache->set(str_repeat("a", 251), "value", 0, 1) ? "t" : "f") . "<br>";
echo "取得 249: " . (($ret = $memcache->get(str_repeat("a", 249))) !== false ? "'$ret'" : "f") . "<br>";
echo "取得 250: " . (($ret = $memcache->get(str_repeat("a", 250))) !== false ? "'$ret'" : "f") . "<br>";
echo "取得 251: " . (($ret = $memcache->get(str_repeat("a", 251))) !== false ? "'$ret'" : "f") . "<br>";
echo "刪除: " . ($memcache->delete(str_repeat("a", 250)) ? "t" : "f") . "<br><br>";
echo "*** 壓縮值測試 ***<br>";
echo "設定 1024*1024-42: " . ($memcache->set("test", str_repeat("a", 1024*1024-42), 0, 1) ? "t" : "f") . "<br>";
echo "設定 1024*1024-41: " . ($memcache->set("test", str_repeat("a", 1024*1024-41), 0, 1) ? "t" : "f") . "<br>";
echo "設定 1024*1024 壓縮: " . ($memcache->set("test", str_repeat("a", 1024*1024), MEMCACHE_COMPRESSED, 1) ? "t" : "f") . "<br>";
echo "刪除: " . ($memcache->delete("test") ? "t" : "f") . "<br>";
$memcache->close();
?>
輸出
*** 截斷鍵值測試 ***
設定 251: t
取得 249: f
取得 250: 'value'
取得 251: 'value'
刪除: t
*** 壓縮值測試 ***
設定 1024*1024-42: t
設定 1024*1024-41: f
設定 1024*1024 壓縮: t
刪除: t