所以我刚刚买了一个小型 vps。我安装了 apc,它使普通页面的速度提高了 20% - 30%。我读了有关 memcached 的文章,得出的结论是,如果我没有分布在其他服务器上,我可以使用 apc 来做同样的事情(缓存数据库结果中的对象)。由于我只有一台服务器,因此 apc 对于在内存中缓存内容同样有益。
我仍处于开发模式,我确信很难说什么最适合生产模式。问题是,我的数据库查询似乎非常快(介于 .0008 和 .02 之间)。我的页面都不是数据库密集型的。
将结果缓存在内存中对我有好处吗?如果数据库现在运行良好,那么以后会不会很困难?此外,连接到数据库是否会降低速度(即使我缓存了大部分查询,每个页面都必须与数据库进行一些会话数据交互)。所以,基本上,如果我的内存有限,只有一台机器,那么使用 apc 而不是让数据库取消缓存会更快吗?
有想法吗?
答案1
您的数据库查询现在速度很快。但它们可以扩展吗?您是否尝试过添加实际数量的真实数据,然后重试?那个查询在 8 名成员时效果很好,但在 400,000 名成员时效果很糟糕吗?
是否缓存完全取决于应用程序和具体情况。如果您预计负载会大幅增长,并且您的瓶颈是 CPU,那么缓存将对您有所帮助,另一方面,如果您的瓶颈是 RAM 并且您正在使用交换,那么缓存将对您不利。
我实际上并没有对是否缓存进行全面的公正讨论,但这是您需要问自己的最基本的问题。
答案2
很难说哪里可以找到最佳平衡。APC 的对象缓存通常用于存储需要相对较长时间重新创建的对象,例如,数据库结果集太大而无法由数据库自己的查询缓存缓存,或者用于在 PHP 请求之间持久保存的临时数据结构。
您的数据库查询似乎非常快。如果您的查询缓存命中率在 95% 以上,那么大多数结果已经由内存提供,APC 的缓存不会有太大帮助。如果您对数据库结果进行任何处理,那么将该结果存储在内存中可能会有所回报。
连接数据库的成本相对较高,因此将连接设为单例以重复使用是一个好主意。一些数据库抽象(例如 Zend Framework 中的抽象)会延迟建立实际连接,直到真正需要时才建立。
很难给出具体的建议,因为收益很大程度上取决于您的应用程序和服务器。我建议使用 Xdebug 或 Zend Debugger 之类的分析器来准确了解您的时间都花在了哪里。测量就是了解。