mysql缓存和memcached之间的区别

时间:2013-11-10 10:42:29

标签: php mysql sql caching

我有1个mysql表,严格由admin控制。数据输入非常低,但该表中的查询很高。由于表格不会改变内容,我想用mysql query cache和PHP一起使用,但是当我用谷歌搜索它时会感到困惑{。{1}}。

  • memcachedmemcached之间的基本区别是什么?
  • 根据以下条件,哪个最适合我?
  • 我还打算为自动完成框扩展相同的内容,这适用于这种情况?

我的查询将返回少于30行,大部分是非常少的字节数据,并且将具有相同的mysqlnd_qc查询。我在一台服务器上,没有负载共享。谢谢你提前。

3 个答案:

答案 0 :(得分:2)

如果您的查询始终相同,即您执行SELECT title, stock FROM books WHERE stock > 5并且您的条件永远不会更改为stock > 6等,我建议使用MySQL查询缓存。

Memcached是一个键值存储。基本上它可以缓存任何东西,如果你可以把它变成key =>值。有很多方法可以用它来实现缓存。你可以从数据库中查询你的30行,然后逐行缓存它,但如果你一遍又一遍地返回同一组行,我没有理由这样做。对于memcached,我能想到的最基本的例子是:

// Run the query
$result = mysql_query($con, "SELECT title, stock FROM books WHERE stock > 5");

// Fetch result into one array
$rows = mysqli_fetch_all($result);

// Put the result into memcache.
$memcache_obj->add('my_books', serialize($rows), false, 30);

然后执行$memcache_obj->get('my_books');并对其进行反序列化以获得相同的结果。

但是,因为你一遍又一遍地使用相同的查询。为什么在让MySQL处理所有缓存时添加复杂功能?请记住,如果使用memcached选项,则需要设置memcached服务器以及实现逻辑以检查结果是否已存在于缓存中,或者是否已在数据库中更改了记录。

在这种情况下,我建议在memcached上使用MySQL查询缓存。

您需要注意MySQL查询缓存的一件事是,您的查询必须完全相同,没有多余的空格,无论如何评论。这是因为MySQL根本没有解析来确定从缓存中比较查询字符串。查询中某处的任何额外字符意味着不同的查询。

Peter Zaitsev在http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/解释了很好的MySQL查询缓存,值得一看。确保您不需要像MySQL Zaitsev所提到的MySQL Query Cache不支持的任何内容。

答案 1 :(得分:1)

如果查询运行得足够快并且没有真正减慢您的应用程序,请不要缓存它。使用这么小的表,MySQL会将它保存在自己的缓存中。如果您的应用程序和数据库位于同一台服务器上,那么收益将非常小,甚至可能无法衡量。

因此,对于第3个问题,它还取决于您如何查询基础表。大多数时候,让MySQL在内部缓存就足够了。另一种方法是生成所有可能的组合并存储它们,因此mysql不需要计算匹配的行并立即返回正确的行。

作为一般规则:在没有缓存的情况下构建应用程序,并且只为不经常更改的事物添加缓存,如果a)结果集的计算复杂且耗时或b)您有多个应用程序实例通过网络调用数据库。在这些情况下,缓存可以带来更好的性能。

此外,如果您在Apache等Web服务器中运行PHP,则在程序内部进行缓存不会带来太多好处,因为它只使用当前页面的缓存。然后需要一个外部缓存(如内存缓存)来缓存多个结果。

答案 2 :(得分:-1)

  

memcached和mysqlnd_qc之间的基本区别是什么?

他们之间根本没有共同之处

  

哪种情况最适合我?

mysql查询缓存

  

我还打算为自动完成框扩展相同的内容,这适用于这种情况?

狮身人面像搜索

相关问题