你能在Memcache中存储一个数组吗?
我想存储;
作为一个阵列,有人告诉我你可以然后有人告诉我你不能 这是什么?
答案 0 :(得分:23)
是
Memcache::set('someKey', array(
'user_id' => 1,
'url' => 'http://',
'name' => 'Dave'
));
请参阅documentation了解非常详细的示例。
答案 1 :(得分:8)
memcache中项目的最大存储大小为1,048,576字节(1MB),序列化数组确实需要一些空间。
如果你要简单地构建数组:
array(
[0] => 1,
[1] => 2,
[2] => 3
)
键是自动生成的,值是用户ID。
使用此结构编号为1-5000的5000个用户的序列化数组的字符串长度为67792个字符,50000个用户生成777794个字符的数组。
编号100000到150000会产生一个838917个字符的序列化字符串。
所以对于50k用户(如上一个问题所述),您可能会低于1MB的限制。如果您有本地缓存(APC等),请使用它,或者如果由于任何原因不一次需要所有ID,我强烈建议拆分结果或只使用数据库。
还要考虑存储在memcached中的数据结构。如果您只是使用缓存来为您提供要查找的主键列表,那么您是否需要其他数据?
答案 2 :(得分:2)
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$id = $_REQUEST['name'];
$key = md5("SELECT * FROM memc where FirstName='{$id}'");
$get_result = array();
$get_result = $memcache->get($key);
if ($get_result) {
echo "<pre>\n";
echo "FirstName: " . $get_result['FirstName'] . "\n";
echo "Age: " . $get_result['Age'] . "\n";
echo "</pre>\n";
} else {
$query="SELECT * FROM memc where FirstName='{$id}'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo "<pre>\n";
echo "FirstName: " . $row[1] . "\n";
echo "Age: " . $row[3] . "\n";
echo "Retrieved from the Database\n";
echo "</pre>\n";
$memcache->set($key, $row, MEMCACHE_COMPRESSED, 60);
mysql_free_result($result);
}
根据您的要求添加更改数据库设置,测试代码请尝试
答案 3 :(得分:1)
您可以在memcached中存储几乎任何您想要的内容。
请参阅memcache::set
的文档,其中包含:
bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )
VAR
The variable to store. Strings and integers are stored as is, other types
以序列化方式存储。
所以,是的,您可以存储数组,甚至可以存储对象: - )
顺便说一句,与Memcache::add
和Memcache::replace