我想知道是否可以在memcached中存储“资源”,我现在正在尝试以下代码,但显然它不正确:
$result = mysql_query($sSQL);
$memcache->set($key, $result, 0, $ttl);
return $result;
答案 0 :(得分:9)
我不同意zerkms。仅仅因为MySQL有一个缓存系统(实际上,它有几个),并不意味着优化数据库访问没有任何好处。 MySQL的查询缓存很棒,但它仍有局限性:
即使使用远程服务器Memcached is roughly 23% faster than MQC也是如此。使用APC的对象缓存,与单独使用MQC相比,您可以获得高达990%的改进。
因此,有很多理由在MySQL的查询缓存之外缓存数据库结果集。毕竟,当您需要在同一个脚本中多次访问结果数据时,可以在PHP变量中本地缓存结果数据。那么,如果结果集没有改变,为什么不在多个请求中扩展它呢?
仅仅因为服务器足够快并不意味着你不应该努力编写有效的代码。缓存数据库结果并不需要花费太多精力 - 尤其是当APC和Memcached等加速器专为此目的而设计时。 (当我some of the largest sites on the internet use Memcached in conjunction with MySQL时,我不会将这个问题视为一个“奇怪的想法”。)
那就是说,zerkms是正确的,你必须首先获取结果,然后你可以使用APC或Memcached缓存数据。但是,还有另一种手动缓存查询结果的选项,即使用Mysqlnd query result cache plugin。这是MySQL查询结果的客户端缓存。
Mysqlnd查询结果缓存插件允许您使用APC,Memcached,sqlite或用户指定的数据源透明地缓存查询。但是,此插件目前与MQC具有相同的限制,因为无法缓存预准备语句。
答案 1 :(得分:-2)
你为什么需要这样? Mysql有自己的性能 query cache
但如果您仍想遵循您的奇怪想法 - 您需要将所有数据提取到数组(使用mysql_fetch_assoc
或其他),然后将该数组存储到memcached中。