我们研究了许多论坛,不知道以下内容的答案。我们都有 APCMemcache 安装在我们的服务器上。我们不确定正确和最佳配置是什么。

我的问题

什么是/是使用Memcache + APC同时运行Magento的最佳设置? (或者这根本不聪明)

背景调查

在这里,建议将memcache和APC作为快速和缓慢的缓存(但没有磁盘)。听起来只有在您有足够的RAM(确定)时才有效

本文是关于memcache的 或者 APC-我们都有

它在这里指出,只有当您也定义了缓慢的后端,Memcache才真正起作用

我认为这篇文章也是如此

这是我的ISP解决方案local.xml

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

情况

共享托管Brim FPC已安装: http://ecommerce.brimllc.com/full-page-cache-magento.html(此FPC还具有可扩展的文件缓存,以使其更复杂)

有帮助吗?

解决方案

您需要了解这两种产品之间的明确区别,以了解如何使用它们。

  • APC都是 OPCODE缓存快速后端
  • memcache只是一个 快速后端

使用APC作为OpCode缓存

只需在服务器上安装模块

pecl install apc

并在您的 php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

然后,您启用并微调 运行时配置 适合,例如。

apc.enabled
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

然后重新启动PHP/Apache

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

之后,别无其他。确认APC可以通过快速启用 phpinfo() - 但是,在这一点上,APC的OpCode缓存部分处于活动状态。

在Magento的一边没有任何配置。

使用APC作为快速后端

您需要将以下内容添加到您的 ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

然后冲洗现有的商店缓存。要验证它正在工作,请在前端加载页面 ./var/cache 目录应保持空。

使用memcache作为快速后端

您需要安装Memcache作为PHP扩展名,并在服务器上安装相应的Memcache守护程序(Memcached)。

pecl install memcache

并在您的php.ini中启用它

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

然后在服务器上安装模因。对于RH/CentOS,请调整URL以适合您的发行版和CPU架构。

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

然后将Magento修改为使用Memcache作为快速后端,将套接字路径更改为TCP/IP连接以适应。

<cache>
  <slow_backend>database</slow_backend>

  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>

  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

memcache和标签的警告 - 它存储了什么

memcache仅支持一级键值关系,因此它无法存储Magento Cache标签(用于独立冲洗缓存数据)。结果,您要么需要指定 slow_backend 维护缓存内容标签关系,或者根本不定义一个。

如果您定义了 slow_backend, ,您承担缓存标签的风险如此之大,以至于否定了性能;还有一个固有的问题,即如果每个服务器都维护自己的缓存标签,则无法跨多个服务器扩展。

因此,当使用memcache时 更好的 方法(使用警告,您无法独立冲洗缓存),不用使用 slow_backend.

在这种情况下,我们建议删除 <slow_backend>database</slow_backend> 并用:

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

这将破坏/禁用第二级缓存(并防止标签存储),但仍允许进行Memcache的性能。

使用哪个

如果是单个服务器部署 - 只要将APC用于所有事物,就不会受到伤害。

如果是分布式设置 - 然后,您需要将memcache用作快速后端(以便所有计算机都可以访问公共商店)。

更令人担忧的是,如果您的托管提供商无法告诉您正确的设置要使用,那么您肯定会有错误的主机。


归因: sonassi.com, php.net, repoforge.org

其他提示

我完全同意以前的答案,但这是完成它的简短精确度:是的,APC可以用作缓存存储引擎和PHP字节代码优化器。但是需要澄清两点:

  • 作为快速后端,APC使用的配置指令通过APC.USER_%指令来了解其必须保存数据必须保存的数据。另一个仅涉及字节代码缓存(ex apc.ttl:OpCode缓存的到期持续时间,apc.user_ttl:由Magento缓存中存储的数据的到期持续时间)。

  • 作为快速后端,APC的行为与MEMCACH的行为完全相同:它不管理缓存标签,并且对于Magento,它需要配置的慢速后端(或默认情况下使用缓慢的后端文件)。

根据我的经验,在流量庞大的网站上,如果您仅将APC用作字节代码优化器,则在APC.SHM_SIZE配置值中需要96至256mo。另外,将APC.NUM_FILES_HINT从1000增加到15000:默认情况下,APC缓存字节代码缓存仅1000个文件,而Magento则包含约20,000个PHP和PHTML文件(默认情况下)(find . -type f -name "*.php" -o -name "*.phtml" | wc -l)。因此,使用您的源代码自定义此值。

如果您使用APC或以快速后端的方式使用MEMCACH,则很难为您提供有关所需内存的一些提示:这实际上取决于您实例上应用的缓存策略。

目前,您的缓存配置工作如下:

  • 每个内容都存储在备件和文件中
  • 快速后端总是在后端速度下要求
  • 如果快速后端什么都没发现,Magento在缓慢的后端寻找

为什么这两个级别管理?备忘录和其他快速后端是内存存储。因此,这意味着数据可能会损坏或消失。

如何提高此配置性能?

禁用第二次写作可能是最有效的选择之一。这在您提到的第四篇文章中进行了解释。但是,如果没有修改,您将无法使用slow_backend_store_data源代码。在您的上下文中,我不建议出于以下原因进行自定义:您存储在缓存中的数据将永远不会受到控制。您将在内存中存储数据,将赢得性能,但也许会发送给您的Vistors的内容无效。因此,您需要找到一个解决方案,以确保您拥有内存频率(以获得更好的性能),写入控制以及禁用slow_backend_store_data缓存的能力。您可以通过:

  • 用redis替换备用服务器 (redis可以像文件系统完成一样控制读写),并且 继续使用APC 作为字节代码优化器

  • *确保您能够使用slow_backend_store_data选项* 通过自定义源代码,或者通过切换到数据库慢速后端(是的,它增加了数据库服务器的负载,但是如果您的缓存策略定义得很好,则不应该是问题)

  • *停用slow_backend_store_data选项*: :在这种配置中,不再需要,您已经读取和写入Redis完成的控件。

另外,我们已经发现,当将APC与Magento一起使用时(用于OpCode Caching-我们使用Redis进行常规的Magento页面和Block Caching),因此必须确保统计设置在生产中为0(但1 in发展):

apc.stat = 0

APC.STAT设置用于确定是否检查每个请求上的脚本以确定是否已修改(http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat)因此,将其设置为生产环境中的0将带来APC不按每个请求进行此检查的性能好处。

值得注意的是,一旦将APC.STAT设置为0,您可能必须重新启动Web服务器进程才能拾取文件更改(即寄托后),但无论如何,这都应该是您的投机后策略的一部分。

我们为加快后端加快后端所做的最好的事情就是 将Redis作为缓存处理程序安装. 。现在,Magento 1.8及以上的Core也得到了支持。

没有任何比较...现在是单击点击器点击单击

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

此外,您可以考虑添加redis会话扩展名,以还将会话添加到Redis Memory Server ...

祝你好运!

从此local.xml文件中,Magento将拾取最后一个条目并使用memcache。我认为APC和Memcache如何与Magento一起使用之间存在混乱。

首先,APC有2种用途:

  • opCode缓存 - 将您的PHP文件编译为OpCode,使脚本执行速度大约25%
  • 密钥/值存储 - Magento可以用作缓存系统。

另一方面,memcache只是一个密钥/值存储。 Memcache的最大优点是它可以在客户端服务器模式下工作,因此多个前端服务器可以使用相同的缓存,如果您有多个服务器可以使用同一网站,则必须使用。

最常见的设置是安装APC以获取OpCode缓存(因此您可以获得约25%的脚本执行〜25%),并将Memcache用作缓存服务器。我还将APC用作缓存系统,尽管从理论上讲,它应该比Memcache快一点,但您无法分辨出区别。

许可以下: CC-BY-SA归因
scroll top