这只是关于 memcache 的两件小事,可能不太清楚,即键和数据大小的限制以及 memcache 协议中标志的行为。
* 键的最大大小为 250,更大的键会被截断。数据也有 (1MB - 42 字节) 的限制。
* 在 memcache 协议中,有一个 16 位(较新版本为 32 位)标志,您可以将其设置为任何值,因为 memcache 不会对标志执行任何操作。php api 不会让您获取标志,因为 php 使用标志用于 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