Magento 2 employs backend caching at many levels within the system -- File System (default), Database, Redis and Varnish, which is used to store web pages to speed up the load processes and improve your Magento 2 site performance.
In this post, we are going to introduce a couple of handy CLI (Command Line Interface) commands -- one of the simplest methods to manage your Magento 2 cache. We will also make a short overview of Magento 2’s default cache backend solution -- file system; the difference between cache:flush vs. cache:clean.
Let’s roll in.
Magento 2 Cache types at a glance
Magento 2 does a lot of caching. By default, these caches are all located in Magento 2’s root var/cache/ and /var/page_cache/ directories. The cache record will look like:
These record file names are composed of the prefix mage— followed by an Id (a unique string) that identifies that particular record, combined with a tag (a way to identify the type of cache record) and some other unique identifiers like the first 2 characters of the md5 hash of the path to the file. This pattern makes each record unique and allows you to clean all cache records tagged with a given tag (or tags).
When opening the System | (Tools) Cache Management in your Magento 2 admin panel, you will see the following grid on the screen:
As indicated in the screenshot, Magento 2 has twelves cache types. These are:
|When to clean this cache type?
|Various XML configurations that were collected across module and merged
|After making changes to configuration files or settings via the admin panel
|Layout building instructions
|After modifying layout files
|Block HTML output
|Page blocks HTML
|After modifying the view layer
|Collection data files
|Magento cleans up this cache automatically. But it also depends on your specific use case or custom module logic.
|API interfaces reflection data
|Removes a dependency between the Webapi module and the Customer module.
|Database DDL operations
|Results of ddl queries, such as describing tables or indexes
|Magento cleans up this cache automatically. But it also depends on your specific use case or custom changes to your database schema.
|EAV types and attributes
|Entity types declaration cache
|You should not typically need to clean or flush this cache type.
|Integration configuration file
|After changing or adding integrations
|Integrations API Configuration
|Integrations API configuration file
|Full page caching
|After modifying code level that affects HTML output
|Merged translations from all modules
|Web Services Configuration
|REST and SOAP configurations, generated WSDL file
|After modifying configuration files
Overview of Magento 2 cache types
How to manage Magento 2 Caches using CLI commands
In this section, we will talk more about cache management. If for any reason you do not want to use the Magento 2 cache management dashboard, you can manage cache from the built-in bin/magento console tool that allows for fast and simple cache management.
Working faster with bin/magento
This is a handy entry point to working with all Magento 2’s CLI commands. When you run command in terminal: php -f bin/magento, you will get the list of Magento 2 command line available, it will show like this:
This reference lists all available Magento 2 cache commands that you can use as needed.
How to check the cache status
To get the current state information of the cache, open your Terminal window, go to Magento 2 directory and run command: php bin/magento cache:status
If all caches are enabled, it should look like this sample:
How to Disable Cache Types
You can execute the command on terminal: php bin/magento cache:disable to disable all cache types.
A sample after running the command:
If you want to disable a specific cache type, you can execute the command: php bin/magento cache:disable CACHE_TYPE
For more information on the CACHE_TYPE, you can refer to the Tags column in the Overview of Magento 2 cache types table afore-mentioned in this post.
An example to disable Full Page Cache:
How to Enable Cache types
Similar to disabling cache types, open your terminal and run one of the following commands in your Magento 2 root:
php bin/magento cache:enable
php bin/magento cache:enable CACHE_TYPE
An example to enable all cache types:
Clean Cache vs. Flush Cache types
Right now there are two options of deleting caches supported in Magento 2:
php bin/magento cache:flush
php bin/magento cache:clean
Let’s see what is the difference between these two methods.
The cache:clean method, as the “Flush Magento Cache” button in Magento 2 admin does, tries to delete all items from enabled Magento 2 cache types only, according to their associated Magento tags in the default Magento 2 var/cache and /var/page_cache/ directories, including:
That means if you use the alternative cache types (memcached etc.,), those will not be invalidated.
In other words, this option does not affect other processes or applications because it cleans only the cache that Magento 2 uses. Disabled cache types are not cleaned as well.
The cache:flush method, as the “Flush Cache Storage” button in Magento 2 admin does, will remove entire cache entries, regardless of tags. Once you flush a cache type, it purges the cache storage, which might affect other processes applications that are using the same storage.
So you should use the cache:flush with cautions, especially you are using one of the shared storage cache types -- for instance two different applications using the same memcached instance.
A practical tip is to use cache:flush type if you’ve already tried cleaning the cache and you’re still having issues that you cannot isolate.
We hope this post helps you get an overview on how to work with cache in Magento 2. Understanding all nuances related to cache:clean vs. cache:flush is vitally important when you work with Magento 2 extensions and themes.