如何使用Memcache加速PHP?

时间:2009-09-18 01:44:59

标签: php optimization

我为PHP Apache localserver服务器(XAMPP)启用了memcache扩展

但我不知道如何使用它来加速我的PHP脚本 将以下代码写在每个页面的顶部我想加快是否足够?或者我应该做点什么?

       /* procedural API */
       $memcache_obj = memcache_connect('127.0.0.1', 11211);

       /* OO API */
       $memcache = new Memcache;
       $memcache->connect('127.0.0.1', 11211);

phpinfo()显示以下详细信息

        memcache support    enabled
        Active persistent connections   0
        Version 2.2.4-dev
        Revision    $Revision: 1.99 $

由于

2 个答案:

答案 0 :(得分:6)

可能 想要考虑使用memcache_pconnect(),但这样做有利有弊。

你已经设置了memcache。它不会加速任何东西,除非你用它来做某事。您可以缓存四个基本内容:

  1. 从文件中加载内容;
  2. 从数据库中加载内容;
  3. 从远程主机加载内容;和
  4. 存储需要大量时间计算的结果。
  5. 在你用它之前,它什么都不做。

答案 1 :(得分:2)

您需要对代码及其使用的算法进行一些基本概要分析。 Memcache就像在食谱中添加盐:你需要将它添加到正确的部分,否则你就无法获得好处而反而妨碍了它。

在PHP中,有几种类型的缓存可以提高网页的性能,而memcache只是其中之一。如果您有许多相同的查询,则可以在数据库中启用查询缓存。如果您有许多页面连接很少的查询流量,您将受益于连接池(这缓存TCP连接)和DB中的线程缓存(这会缓存数据库上的CPU资源)。

如果要丢弃大​​量数据,特别是字符串和大数组或对象,您可以开始考虑引用并更新不涉及不必要的重新复制的字符串处理(例如,在循环中连接字符串很昂贵 - 将它们添加到一个数组中并在最后将其内爆一次)。这可以是一个很大的性能和内存改进。

如果您有大量查询在一个页面中反复获取相同的信息,则需要改进数据存储层。这将允许您进行一次查询以获取一行,然后在整个页面中重复使用数据,而不是再次获取它。 (这通常是从任意SQL的hotch-potch到对象持久层的最佳理由。)请注意,这可能涉及应用程序的重新设计者。您可以将对象数据的缓存添加到对象层 - 这将有利于使用该类对象的所有,这可能是一个巨大的胜利。这是memcache的一个好点,应用程序代码甚至不必知道。请注意数据生命周期以及是否或如何及早更新。

如果你有很多页面做同样昂贵的查询(即使是通过数据访问层的代理),那么你可以缓存几秒钟。它不一定是memcache,但这是一个不错的选择。

最后,如果您有许多永不改变的文件,您可以使用仅服务静态文件的单独服务器。这为您的执行环境提供了更多执行代码的空间,您可以调整静态文件服务器以便快速返回文件。对于网站性能的认知,这可能是一个巨大的胜利。

IMO,缓存应该改进而不是启用你的应用程序。