非常频繁地拉出很多行 - 我在这里需要memcached吗?

时间:2012-03-03 23:04:32

标签: php mysql memory memcached

我有大约10个表,每行约10,000行需要经常拉动。

例如,国家列表,世界上所有学校的名单等。

PHP不能将这些东西保存在内存中(据我所知)所以我每次都要查询服务器的SELECT * FROM TABLE。我应该在这里使用memcached吗?起初虽然它绝对是肯定的,但是第二个想法,不会mysql已经为我缓存了,这几乎是多余的吗?

我对mysql如何缓存数据(或者甚至是否缓存整个表)没有太多了解。

3 个答案:

答案 0 :(得分:1)

我建议阅读MySQL查询缓存:

http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

答案 1 :(得分:1)

您可以使用MySQL查询缓存,但之后您仍在使用数据库资源来建立连接并执行查询。如果您的网页相对静态,则另一个选项是opcode caching。但是我认为memcached是最灵活的解决方案。例如,如果您有一个需要从应用程序中的各个代码点访问的国家/地区列表,您可以从持久存储(mysql)中提取数据,并将它们存储到memcached中。然后,数据可用于任何业务需求的应用程序的任何部分(包括批处理和cronjobs)。

答案 2 :(得分:0)

你肯定需要一些类型的缓存;数据库内部和周围的缓存层的效率远低于memcached可以提供的效率。

那就是说,如果你得出的结论是正确的东西是缓存查询本身,而不是根据查询缓存你正在生成的内容,我想你会得出结论 - 需要更多分析。

在输出生成期间使用了除这些查询内容之外的哪些数据?页面缓存或页面片段缓存(或前面的缓存反向代理)是否更有意义?是否真的有必要“经常”运行这些查询?底层数据的变化频率如何?发生这种情况时,您是否有任何通知事件?

此外,没有SELECT *子句的WHERE查询是“代码味道”(表示某些事情可能正在以错误的方式完成),特别是如果不是所有数据被直接显示到用户。