3

我有 1 个由管理员严格控制的 mysql 表。数据输入非常低,但该表中的查询量很高。由于该表不会改变太多内容,因此我想将mysql 查询缓存与 PHP 一起使用,但对memcached.

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

我的查询将返回少于 30 行的数据,其中大部分是很少字节的数据,并且将具有相同的SELECT查询。我在一台服务器上,不会进行负载共享。先感谢您。

4

3 回答 3

2

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

Memcached 是一个键值对存储。基本上它可以缓存任何东西,如果你可以把它变成 key => value。有很多方法可以用它来实现缓存。您可以从数据库中查询 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);

然后执行 a$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 Query Cache ,值得一看。确保您不需要任何 MySQL Query Cache 不支持的东西,正如 Peter Zaitsev 提到的那样。

于 2013-11-10T11:12:29.743 回答
2

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

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

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

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

于 2013-11-10T11:15:49.897 回答
-1

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

他们之间没有什么共同点

根据以下条件,哪个最适合我?

mysql查询缓存

我还打算为自动完成框扩展相同的内容,在这种情况下哪个合适?

狮身人面像搜索

于 2013-11-10T10:46:05.033 回答