Magento - Magento缓存

3

我正在使用memcache。

我想了解Magento缓存中存储的内容以及如何存储?

Magento是使用网站范围还是商店范围来存储缓存变量?

我已经搜索和查找了代码,但无法得出结论,请如果有人能够指导我正确的链接和路径

谢谢&问候, Saurabh


什么版本?Magento的。 - Josua Marcel C
5个回答

14
如果您进入管理区的缓存管理部分,您可以查看它缓存了什么(配置、布局配置、块HTML输出、翻译、EAV类型等)。我不是Magento缓存机制的专家,但以下几点可能会有所帮助。注意,我只熟悉Magento 1.3.x,而不是1.4.x,因此事情可能已经发生改变。
实际上,缓存存储在var/cache目录中。那里有很多目录(mage--0、mage--1、mage--2),每个目录都有缓存文件。执行ls var/cache/mage*/*命令以查看所有文件。
配置 - 配置源是各种各样的。您的app/etc/local.xml和所有的config.xml文件(位于每个模块的etc目录中)将组合在一起形成一个大的配置对象。然后Magento从core_config_data表中读取以更新配置对象。然后将配置写入缓存文件,以便下次请求时无需打开大量的配置文件并访问数据库。这些信息以某种方式存储在var/cache目录下的一堆文件中。要了解更多信息,请执行ls var/cache/mage*/*CONF*命令。
布局 - 这很像配置...在app/design/frontendOrAdminhtml/yournamespace/layout/目录中有一堆xml文件,所有这些文件都合并为一个布局配置对象,然后缓存在缓存目录中。
块HTML - 块生成的实际HTML被缓存。每个块都能够决定它将被缓存多长时间。

最后,回答你有关缓存是按网站还是商店计算的问题,我不能确切地说,因为我还没有设置过多个网站/商店的店铺。看起来可能会有一些特定于商店/网站的文件,但我看不出它们真正有逻辑性的组织方式。例如,在我的一个实例中,我看到了一个var/cache/mage--f/mage---LAYOUT_FRONTEND_STORE0_DEFAULT_BLANK_SEO文件和一个var/cache/mage--f/mage---LAYOUT_FRONTEND_STORE1_DEFAULT_BLANK_SEO...但是事实上,我只配置了一个商店,并且这两个文件的内容相同。祝好运!


嗨Sdek,感谢您的详细解释。当我试图弄清楚这个问题时,我发现对于被缓存的块,会生成缓存键。其中一个看起来像“Cache Key: CATALOG_PRODUCT_NEW_1_default_a022_1_d6cc4b5d3cce3f79f5254e4a971267f5_20”。现在我正在寻找如何形成它,我认为a022后面的“1”是网站ID。注意:a022是我的主题。 - Saurabh
你说缓存文件存储在var/cache中。如果他正在使用Memcached,除非需要一些文件,否则不应该将它们存储在那里。 - Tim Reynolds
是的,我也是这么想的,但我认为它会将缓存存储在文件系统和memcached中。我也对此感到困惑。已经过去一年了,所以我可能记错了。 - shaune

1
我想到的最好的解决方案是使用两级缓存。请参考 app/etc/local.xml.additional 以了解如何在其中放置 memcached 服务器节点。请注意,在 <servers> 标签内,您必须有像 <server1><server2> 这样的标签,封装每个 memcached 节点的设置。
<cache>
    <backend>memcached</backend>
    <slow_backend>database</slow_backend>
</cache>

这样所有的缓存都是共享的。

清除缓存的方法如下:
1. 关闭Apache
2. 连接到MySQL并连接到Magento数据库,然后运行truncate core_cache; truncate core_cache_tag。
3. 然后重启Memcached节点。
4. 重新启动Apache,但在将其放入负载均衡器之前,我会保持它处于未命中状态,以生成APC opcode缓存。否则,负载可能会飙升。

这一切似乎都很极端,但我发现这对我很有效。使用后端清除缓存非常慢。我在core_cache表中有大约100k条目,在core_cache_tag中有近100万条目。如果我不这样做,有时会出现奇怪的行为。


请问您能否描述一下“我然后弹跳memcached节点”的意思?为什么需要关闭apache?我在没有停止apache的情况下截断了core_cache_tag。至于第四步,您能解释一下如何将apache从负载均衡器中移除吗? - nicoX
@nicoX - 我的评论已经有些过时了。我所说的“bounce”是指重新启动memcached,以清除所有缓存。我目前的建议是改用Redis:https://github.com/colinmollenhour/Cm_Cache_Backend_Redis - runamok
我们现在正在运行memcached,并且暂时无法转向Redis。我重新启动了memcached,检查了var/cache目录,发现之前的缓存文件仍然存在。 - nicoX
@nicoX - 你是使用数据库作为第二级别还是文件系统?你使用了多少个Apache节点?关于我关于将Apache保持在负载均衡器之外的评论,有一个健康检查文件,我会暂时重命名它。然后,我可以通过其外部IP地址直接访问该节点以预热APC opcode缓存。请尽快了解Redis。它使所有这些都变得更加简单和高效。 - runamok

1

您在./app/etc/local/xml中的Memcache配置将决定Memcache实际缓存的内容。

如果您仅使用单级缓存(没有slow_backend),那么Magento将完整地将其缓存存储在Memcache中。

然而,如果没有定义cache_tags,则它会缓存内容,即无法区分缓存项。

例如:配置、块、布局、翻译等。

因此,如果没有定义slow_backend,则无法单独刷新缓存,事实上,您几乎总是需要依赖“清除缓存存储”才能看到更新生效。

我们在这里撰写了一篇很好的文章,涵盖了您的问题 - http://www.sonassi.com/knowledge-base/magento-knowledge-base/what-is-memcache-actually-caching-in-magento/


1

0

Memcached是一种分布式内存缓存系统。通过将数据库对象存储在动态内存中,以减少每当外部数据源请求读取时对服务器的压力,从而加速具有大型动态数据库的网站。Memcached层可以减少数据库请求的次数。

实际上,缓存存储在var/cache目录中。其中有很多目录(mage--0、mage--1、mage--2),每个目录都有缓存文件。执行ls var/cache/mage*/*命令以查看所有文件。

配置Memcache Magento 2

Magento 2也支持使用Memcached缓存对象,但默认情况下未启用。您需要对$Magento2Root/app/etc/env.php文件进行简单更改以启用它。

在env.php中,您会看到许多带有不同设置和配置的PHP数组。在您喜欢的代码编辑器中打开该文件并找到以下代码:

array (
session' =>
    'save' => 'files',
),

将此块修改为:

'session' =>
    array (
      'save' => 'memcached',
      'save_path' => '<memcache ip or host>:<memcache port>'
),

请注意,memcache IP 的默认值为 127.0.0.1:11211。同样,memcache 端口的默认值为 11211。
完整手册请参考以下链接: https://www.cloudways.com/blog/magento-2-memcached/ https://devdocs.magento.com/guides/v2.4/config-guide/memcache/memcache_magento.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接