I have an issue with a site that I'm consulting on right now where page modifications (for instance to static pages, which is how we've been testing this) are not invaliding the cache properly. Honestly, I'm still learning quite a bit about redis and the FPC at current; that's where I (and another dev on the team) are assuming that things are going bad at this point. Basically the issue is that if any changes are made to [one of the static content] pages, the cache is [presumably] not invalidating, and the previously warmed page continues to be served until caches are manually flushed. For awhile we thought that the issue had to deal with redis no longer being hooked up to FPC, but it appears that those were two separate issues and that FPC<-->redis is now working properly, while the page invalidation is still not working as [we feel] it should.
Can anybody tell me a little bit more about the behavior of redis/FPC caching and modification of the cached pages? Is there supposed to be some sort of invalidation going on, or is this a feature that does not exist? I've studied the page at Colin Mollenhour's GitHub repo on Cm_Cache_Backend_Redis and Magento DevDocs, and unfortunately, I don't seem to be able to find anything regarding this issue mentioned on there. I've been looking for more documentation elsewhere, but I don't seem to be able to find any resources anywhere with my level of Google-fu.
I'll go ahead and add a copy of our local.xml, with sensitive data redacted, in case that is helpful at all. I am currently aware of the unrelated issues regarding a single instance of redis handling 3 caches, as well as the issues with redis's transparent compression rendering the 'gzip' compression setting redundant in this file, in case you notice. Any pointers in the right direction, direct assistance, or helpful hints on the page/cache invalidation are very greatly appreciated.
TIA
Contents of local.xml follow:
<config> <global> <install> <date><![CDATA[Tue, 12 Aug 2014 09:19:47 +0000]]></date> </install> <crypt> <key>***[redacted]***</key> </crypt> <disable_local_modules>false</disable_local_modules> <resources> <db> <table_prefix><![CDATA[]]></table_prefix> </db> <default_setup> <connection> <host><![CDATA[localhost]]></host> <username>***[redacted]***</username> <password>***[redacted]***</password> <dbname>***[redacted]***</dbname> <initStatements><![CDATA[SET NAMES utf8]]></initStatements> <model><![CDATA[mysql4]]></model> <type><![CDATA[pdo_mysql]]></type> <pdoType><![CDATA[]]></pdoType> <active>1</active> </connection> </default_setup> </resources> <session_save><![CDATA[db]]></session_save> <redis_session> <host>127.0.0.1</host> <port>6379</port> <password>***[redacted]***</password> <timeout>2.5</timeout> <persistent></persistent> <db>2</db> <compression_threshold>2048</compression_threshold> <compression_lib>lzf</compression_lib> <log_level>1</log_level> <max_concurrency>6</max_concurrency> <break_after_frontend>5</break_after_frontend> <break_after_adminhtml>30</break_after_adminhtml> <first_lifetime>600</first_lifetime> <bot_first_lifetime>60</bot_first_lifetime> <bot_lifetime>7200</bot_lifetime> <disable_locking>0</disable_locking> <min_lifetime>60</min_lifetime> <max_lifetime>2592000</max_lifetime> </redis_session> <cache> <backend>Cm_Cache_Backend_Redis</backend> <backend_options> <server>127.0.0.1</server> <!-- or absolute path to unix socket --> <port>6379</port> <persistent></persistent> <database>0</database> <password>***[redacted]***</password> <force_standalone>0</force_standalone> <connect_retries>1</connect_retries> <automatic_cleaning_factor>0</automatic_cleaning_factor> <compress_data>1</compress_data> <compress_tags>1</compress_tags> <compress_threshold>20480</compress_threshold> <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy --> </backend_options> </cache> <fpc> <lifetime>86400</lifetime> <backend>Cm_Cache_Backend_Redis</backend> <backend_options> <server>127.0.0.1</server> <port>6379</port> <persistent>cache-fpc</persistent> <database>1</database> <password>***[redacted]***</password> <force_standalone>1</force_standalone> <connect_retries>1</connect_retries> <lifetimelimit>86400</lifetimelimit> <read_timeout>10</read_timeout> <compress_data>1</compress_data> <compress_tags>1</compress_tags> <compress_data>gzip</compress_data> </backend_options> </fpc> </global> <admin> <routers> <adminhtml> <args> <frontName><![CDATA[admin]]></frontName> </args> </adminhtml> </routers> </admin> </config>
A few questions to get more details...
I assume you are using Magento EE and its built-in FPC? Or are you using CE with an extension?
Which version of Magento are you running?
If you disable Redis and use File based caching, does it work?
Which static content pages are being updated, and how are these updates being made? Admin panel, FTP/SSH?
@robfico wrote:A few questions to get more details...
I assume you are using Magento EE and its built-in FPC? Or are you using CE with an extension?
Which version of Magento are you running?
If you disable Redis and use File based caching, does it work?
Which static content pages are being updated, and how are these updates being made? Admin panel, FTP/SSH?
My apologies for not catching those details outright. I'll make sure not to overlook that again.
I'll post more information as soon as I've got it here. Thank you for taking the time to ask a little bit more/offer assistance.
Magento CE does not have built-in Full Page Caching. So, you either have a an extension (like Lesti, Extendware, etc...) that is performing the Full Page Caching, or you do not have it. You will want to find out which FPC extension you are using.
Redis is just an in-memory storage system where data can be stored for retrieval quickly.
I'm sorry for the confusion. Looked through admin, looks like we're using Lesti. Seen it before, just hadn't taken note of it.
@robfico wrote:A few questions to get more details...
I assume you are using Magento EE and its built-in FPC? Or are you using CE with an extension?
Which version of Magento are you running?
If you disable Redis and use File based caching, does it work?
Which static content pages are being updated, and how are these updates being made? Admin panel, FTP/SSH?
Sorry for the wait on the information with this, @robfico. Here are some answers that might be a little more helpful to the last questions that you asked (copying answers that I got back verbatim for you here):
Hope this little bit is a bit more helpful. I'm still working on getting our front end guy (the one that provided those answers) onto a development server so that we can do some of the troubleshooting techniques that you were talking about.
TIA
Lesti FPC does support page flushes automatically for the following actions (from the Lesti docs):
----
Pages will be flushed after save of product, category, cms-page and cms-block.
----
Per setting up Lesti with Redis, you need to configure the fpc.xml file to use Redis, and not the generic local.xml FPC method which is for Magento Enterprise. Reference:
https://support.hypernode.com/knowledgebase/configure-lestifpc/
See if this helps with your issues.