如果您的查询始终相同,即您这样做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 提到的那样。