【问题标题】:Memcache vs APC for a single server site data caching用于单个服务器站点数据缓存的 Memcache 与 APC
【发布时间】:2010-12-20 03:25:52
【问题描述】:

我有一个每天推送 200k unqiues 的服务器站点,流量大约每 40 天翻一番(无论如何在过去 5 个月内)。

我几乎只打算将 mysql_query 函数的输出缓存一个小时左右。如果缓存比这更旧,请运行查询,将结果放回缓存中一小时。

我的 mysql 数据库大小约为 200mb(每月增长 10-20mb)。

我通过编写 HTML 输出并使用它们几分钟,然后重新生成 html 来进行大量文件缓存。

不幸的是,由于它是一个数据库站点,它允许许多排序、搜索和排序方法,以及分页......有超过 150,000 个缓存页面。我也没有缓存导致大部分负载的搜索查询。

我想实现一个缓存系统,我想知道哪个更快。希望看到一些基准。

【问题讨论】:

  • +1,这个问题帮助了我,感谢 stackoverflow。

标签: php caching memcached


【解决方案1】:

quick Googling 说 APC 比 Memcached 快 5 倍。

我的经验表明,APC 比 Memcached 快 7-8 倍。但是,memchached 可以由不同的服务访问(例如,如果您主要在 apache 上运行并委托一些流量,例如图像或纯静态内容等html, 到另一个 web 服务,比如 lighttpd),如果不是必不可少的话,它可能非常有用。

APC 的功能比 memcached 少,而且易于使用和优化,但这取决于您的需求。

【讨论】:

  • +1,我没有问新问题,因为它会重复,谢谢@DaNieL,你的答案就是我的解决方案。
  • 你能提供谷歌所说的链接吗?提前致谢。
  • @Gerry: google 说 ... 我的意思是 google 搜索中的第一个结果
  • 我们注意到,当我们将不需要分发的任何查询从 memcached 切换到 apc 时,执行时间显着下降。因此,如果您只需要本地访问权限,我们会投票支持 apc。
  • @Strae,我读过博文声称 APC 的基准测试速度提高了 30 倍。
【解决方案2】:

正如您提到的,缓存有几个不同的方面。我可能会专注于您的 php 应用程序中缓存的以下方面:

  • 操作码缓存,用于缓存 php 脚本的编译字节码。您可以在此处查看基准测试(尽管是较早的文章):http://itst.net/654-php-on-fire-three-opcode-caches-compared 注意:我强烈建议使用操作码缓存。

  • 缓存用户数据 - APC 和其他人执行此操作。这将是您的参考数据或相当静态且不会经常更改的数据。您可以每天清除缓存或在此参考数据更改时触发清除缓存。这也是强烈推荐的,因为通常参考数据经常使用并且不会经常更改。

  • 缓存 sql 查询 - 我知道 Zend 通过简单的设置使这项任务变得容易。由于这些查询不会改变,这是另一个明显的查询(就像你提到的那样)

附加(如果可能):

  • 缓存 html 页面 - 显然缓存静态页面比生成的页面要快,而且通常这很难做到,因为应用程序中的大多数页面都是动态的。如果你能做到这一点就值得,尽管如果你的查询被缓存并且你的 SQL 很简单,我不会关注这个。

  • 缓存 sql 结果 - 我个人远离这个。我将让数据库完成它的工作以及它最擅长的工作,因为 DBMS 通常具有缓存。我可能会缓存执行线程的结果(即,我刚刚检索了这个,所以不要再这样做了),但我不会做太多。

我已成功使用 APC 和 eAccelerator(我个人喜欢使用 APC,它为我的参考数据和 sql 查询提供操作码缓存和用户数据缓存)。使用 XDebug 分析您的代码。

【讨论】:

  • 我不确定我是否理解 sql 查询缓存...和 ​​sql 结果缓存之间的区别。为什么我不想缓存这个?
  • Sql 查询缓存正在缓存 sql 语句(即,从 id = 的帐户中选择贷方?) - 这些不会改变。该查询的结果可能是 200.00 美元,但该金额可能会根据您正在处理的数据类型而变化。通常,与可能的结果相比,查询只是“少数”。
  • 这是来自 Doctrine (ORM) 的解释 - doctrine-project.org/documentation/manual/1_0/en/caching
【解决方案3】:

您想比较 APC 键值存储与 Memcache 对吗?因为APC也做了opcode cache,这是另外一回事。

嗯,在单台机器上,APC k-v 缓存比 memcache 快得多。 Memcache 具有更多功能,但适用于分布式环境,而 APC 仅适用于单个服务器。

我最近做了一个基准测试,设置然后得到 100 万个键,每个键是一个连续的整数,值是一个 32 字节的字符串。

通过 localhost,memcache 可以在单个线程中检索 12k 键/秒。 APC 返回 90K/秒。但是,如果您使用多线程或“multi_get”与 memcache,它会非常接近 APC 性能。

基准测试在 slicehost 的 1GB vps 上运行。

【讨论】:

    【解决方案4】:

    在我的例子中 apc 比 memcache 快 59 倍

    <?php
    ini_set('apc.enable_cli','1'); //if u run in cli you may need to do changes in php.ini
    error_reporting(E_ALL);
    $mem=new Memcache();
    $mem->connect('127.0.0.1',11211);
    $mem->replace('testin','something');
    $i=0;
    $time=time()+microtime();
    apc_store ( 'testin','something');
    $num=1000000;
    while($i<$num){
     $mem->get('testin');
    $i++;
    }
    echo "memcache took: ",time()+microtime()-$time," for 1 million gets","\n";
    $time=time()+microtime();
    $i=0;
    print_r(apc_fetch('testin'));
    while($i<$num) {
    apc_fetch('testin');
    $i++;
    }
    echo "apc took: ",time()+microtime()-$time,"for 1 million gets \n";
    

    这是输出

    memcache took: 37.657398939133 for 1 million gets
    somethingapc took: 0.64599800109863for 1 million gets
    

    【讨论】:

      【解决方案5】:

      几乎不可能准确预测哪个会更快。我会在具有相似数据的开发环境中对两者进行测试。

      当性能很重要时,请始终使用分析器。

      【讨论】:

      • 这是一个标准的懒惰答案。实际上,可以准确预测哪个会更快。请注意,我们对速度有多快不感兴趣,我们感兴趣的是哪个更快。
      【解决方案6】:

      我将 IPB 3.1.4 与 APC 一起使用,它的运行速度比没有它时快两倍。

      Requests per second:    43.46 [#/sec] (mean)
      Requests per second: 24.23 [#/sec] (mean)
      

      暂时不要使用 memcached 测试 IPB

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2011-11-13
        • 2012-09-06
        相关资源
        最近更新 更多