我有1个mysql表,严格由admin控制。数据输入非常低,但该表中的查询很高。由于表格不会改变内容,我想用mysql query cache和PHP一起使用,但是当我用谷歌搜索它时会感到困惑{。{1}}。
memcached
和memcached
之间的基本区别是什么? 我的查询将返回少于30行,大部分是非常少的字节数据,并且将具有相同的mysqlnd_qc
查询。我在一台服务器上,没有负载共享。谢谢你提前。
答案 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查询缓存
我还打算为自动完成框扩展相同的内容,这适用于这种情况?
狮身人面像搜索