我有一个客户电子商务门户托管在专用服务器上,问题是,由于数据库中存在并发搜索请求,数据库访问时间越来越长。我使用的是 Apache+ NGINX。我只是在考虑缓存有限时间内的所有搜索结果页面,这样如果第二次请求相同的搜索查询,那么它将从缓存中获取数据,而不是查询数据库。这些页面是用 PHP 编写的。请提出一个好的方法。谢谢!
答案1
memcache
是解决此问题的一种常见解决方案,并且 PHP 标准库支持该解决方案(前提是您的 PHP 设置中有该模块可用)。请参阅http://www.php.net/manual/en/book.memcache.php适用于 API。您会注意到,还有第二个标准模块与之交互memcache
- 较新的模块称为 memcached,可能支持其他模块不支持的功能。请参阅这个问题和答案了解两者的优缺点。
在开始添加额外的缓存复杂性层之前(实际上它不需要很复杂,但它是一个可能出错的额外事物,需要仔细考虑才能有效/高效地实施),请确保您已经分析了正在进行的查询,以确保您的数据已为它们建立良好的索引。如果常见的搜索类型会导致全表扫描,但可以使用索引搜索,则可以大大减少总体负载。还要确保您有足够的 RAM - 如果您的数据库由于过于频繁地访问磁盘而变慢,因为它没有足够的空间将应用程序的通用工作集保存在其页面缓存中,那么您的 RAMmemcached
也不足以特别有用。
答案2
Apache 有一个用于缓存的模块(mod_cache),它可以缓存您网站所提供的内容,更多信息请访问:http://httpd.apache.org/docs/2.1/mod/mod_cache.html
您可以使用 Apache 的 mod_expires 让重复请求的页面在更长的时间段内过期,但这是在客户端级别上。
Nginx 有可能使用缓存代理缓存和proxy_cache_path。