您需要了解这两种产品之间的明显区别,才能了解如何使用它们。
- 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)
在那之后,无事可做。快速确认启用phpinfo()
APC-否则,此时,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)
然后在服务器上安装Memcached。对于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缓存标签(用于独立刷新缓存数据)。结果,您需要指定一个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