Skip to content

📝 Community Note The content on this page was generated with the assistance of AI and is pending a human review. While we've done our best to ensure accuracy, there may be discrepancies or areas that could be improved.

Cache Management Documentation

Introduction

Cache management is a critical aspect of optimizing the performance and scalability of websites and web applications. Caching involves storing frequently accessed data in temporary storage, such as memory or disk, to reduce the time and resources required to fetch the data from the original source. Proper cache management can greatly improve the response time and overall user experience of a website.

In this documentation, we will explore the cache management features in Magento 2, a popular PHP-based e-commerce platform. We will discuss the different types of cache, how to configure and manage them, and provide code snippets and examples to illustrate the concepts.

Types of Cache in Magento 2

Magento 2 offers several types of cache, each serving a specific purpose. Understanding these cache types is crucial for efficient cache management. The main cache types in Magento 2 are:

  1. Configuration Cache: Stores the merged configuration data for the application. This cache speeds up the loading of configuration settings by eliminating the need to parse and merge the configuration files on each request.

  2. Page Cache: Caches the entire HTML content of web pages, including blocks, layout, and other dynamic content. This cache greatly improves the response time for frequently accessed pages.

  3. Block HTML Output Cache: Caches the output generated by individual blocks in Magento's layout system. This cache minimizes the processing required to generate the HTML output of blocks, resulting in faster page rendering.

  4. Collection Data Cache: Caches the results of database queries performed to retrieve collections of database records. This cache helps reduce the database load by storing the query results and serving them directly from the cache.

  5. EAV Entity Attribute Value Cache: Stores the attribute values of EAV entities, such as products and customers. This cache avoids the need to retrieve attribute values from the database repeatedly, improving the performance of attribute-related operations.

Cache Configuration and Management

Enable/Disable Cache

Magento 2 provides a command-line tool, bin/magento, to enable or disable different cache types. To enable all cache types, use the following command:

bin/magento cache:enable

To enable specific cache types, use the --type option followed by the cache type code. For example, to enable only the page cache and block HTML output cache, use:

bin/magento cache:enable page_cache block_html

Similarly, to disable all cache types, use the following command:

bin/magento cache:disable

Flush Cache

Flushing the cache clears all stored cache data, forcing Magento to recompute and regenerate the cache on the next request. To flush all cache types, run the following command:

bin/magento cache:flush

To flush specific cache types, use the --type option followed by the cache type code. For example, to flush only the page cache and block HTML output cache, use:

bin/magento cache:flush page_cache block_html

Cache Management from Admin Panel

Magento 2 also provides a web-based cache management interface in the admin panel. To access it, navigate to **System ** -> Cache Management. From there, you can enable/disable individual cache types and flush the entire cache or specific cache types.

Cache Invalidation

Cache invalidation is the process of removing or updating cache data when the original data changes. In Magento 2, cache invalidation is handled automatically for many cases, such as when a product is updated or a block's content changes. However, there may be situations where you need to manually invalidate the cache.

Magento 2 provides a cache tags mechanism to manage cache invalidation. Each cache entry is associated with one or more cache tags, and when a tag is invalidated, all associated cache entries are cleared. You can use the Magento\Framework\App\Cache\Tag\Resolver class to invalidate cache tags programmatically.

Here is an example of cache tag invalidation in Magento 2:

<?php
 
use Magento\Framework\App\Cache\Tag\Resolver;
 
class MyCacheTagInvalidation
{
private $cacheTagResolver;
 
public function __construct(Resolver $cacheTagResolver)
{
$this->cacheTagResolver = $cacheTagResolver;
}
 
public function invalidateCacheTags(array $cacheTags)
{
foreach ($cacheTags as $cacheTag) {
$this->cacheTagResolver->invalidate($cacheTag);
}
}
}

In this example, the invalidateCacheTags method takes an array of cache tags and invalidates them using the invalidate method of the Resolver class.

Types of Caching in Magento 2

Magento 2 offers several caching types, each designed to cache specific types of data. Let's explore the most commonly used caching types in Magento 2.

Full Page Cache (FPC)

Full Page Cache is a powerful caching mechanism in Magento 2 that stores fully rendered HTML pages. By caching the entire page, including all blocks and elements, Magento can serve the cached page directly from memory without executing expensive PHP code.

Example: To enable FPC in Magento 2, navigate to Stores > Configuration > Advanced > System > Full Page Cache in the Admin Panel.

Object Cache

Object Cache caches individual objects or entities, such as products, categories, and customer data. When an object is requested, Magento checks if it exists in the cache before fetching it from the database.

Example: To cache an object in Magento 2, use the following code snippet:

$cacheKey = 'my_object_cache_key';
$cacheValue = $this->cache->load($cacheKey);
 
if (!$cacheValue) {
// Object not found in cache, fetch it from the database
$object = $this->objectRepository->getById($objectId);
 
// Save the object in cache
$this->cache->save($object, $cacheKey, [], $cacheLifetime);
} else {
// Object found in cache, use it
$object = unserialize($cacheValue);
}

Configuration Cache

Configuration Cache stores the merged configuration data of your Magento 2 store. It includes the system configuration, module configurations, and other XML-based configurations. By caching the configuration, Magento avoids parsing and merging XML files on each request.

Example: To enable Configuration Cache in Magento 2 via the command line, use the following command:

php bin/magento cache:enable config

Layout Cache

Layout Cache stores the layout XML for each page in your store. By caching the layout, Magento avoids parsing and merging XML files on each request, leading to improved performance.

Example: To enable Layout Cache in Magento 2 via the command line, use the following command:

php bin/magento cache:enable layout

Block Cache

Block Cache caches individual blocks within a page. By caching blocks, Magento can serve the cached block content directly without executing the block's code.

Example: To enable Block Cache for a specific block in Magento 2, add the following code to the block class:

protected function _construct()
{
$this->addData([
'cache_lifetime' => 86400, // Cache lifetime in seconds
'cache_key' => 'my_block_cache_key',
]);
}

Collection Cache

Collection Cache caches the result of database queries made by collection objects. By caching collections, Magento avoids executing the same database query multiple times, resulting in improved performance.

Example: To cache a collection in Magento 2, use the following code snippet:

$cacheKey = 'my_collection_cache_key';
$cacheValue = $this->cache->load($cacheKey);
 
if (!$cacheValue) {
// Collection not found in cache, fetch it from the database
$collection = $this->collectionFactory->create();
 
// Save the collection in cache
$this->cache->save(serialize($collection->getData()), $cacheKey, [], $cacheLifetime);
} else {
// Collection found in cache, use it
$collection = unserialize($cacheValue);
}

Metadata Cache

Metadata Cache stores metadata related to various entities, such as attributes, tables, and configurations. By caching metadata, Magento avoids querying the database for metadata information repeatedly.

Example: To enable Metadata Cache in Magento 2 via the command line, use the following command:

php bin/magento cache:enable metadata

Caching Configuration in Magento 2

Magento 2 provides multiple ways to configure caching. Let's explore the two most common methods.

Configuration via the Admin Panel

You can configure caching options via the Magento 2 Admin Panel. Navigate to Stores > Configuration > Advanced > System > Cache Management. Here, you can enable/disable specific cache types and configure cache settings.

Configuration via Command Line

Alternatively, you can configure caching options via the command line using the bin/magento cache command. This method is useful, especially when automating deployment processes or managing multiple environments.

Example: To enable the Full Page Cache via the command line, use the following command:

php bin/magento cache:enable full_page

Caching Strategies

To ensure efficient utilization of caching, it's essential to consider proper caching strategies. Let's explore some common caching strategies in Magento 2.

Automatic Cache Invalidation

Magento 2 automatically invalidates caches when relevant data changes. For example, when a product is updated, the associated caches (object, block, collection, etc.) are invalidated, ensuring that the updated data is fetched from the original source.

Manual Cache Invalidation

In some cases, you may need to manually invalidate specific caches, rather than relying on automatic invalidation. Magento 2 provides cache management commands that allow you to flush specific cache types or all caches.

Example: To flush the Object Cache via the command line, use the following command:

php bin/magento cache:flush customer

Cache Tags

Cache Tags are a powerful feature in Magento 2 that allow you to assign tags to cached items. When a cache with a specific tag is invalidated, all associated cached items are also invalidated. This ensures that related data is refreshed when any item in the group is modified.

Example: To add a cache tag to an object cache in Magento 2, use the following code snippet:

$cacheKey = 'my_object_cache_key';
$cacheValue = $this->cache->load($cacheKey, $cacheTag);
 
if (!$cacheValue) {
// Object not found in cache, fetch it from the database
$object = $this->objectRepository->getById($objectId);
 
// Save the object in cache with the cache tag
$this->cache->save($object, $cacheKey, [$cacheTag], $cacheLifetime);
} else {
// Object found in cache, use it
$object = unserialize($cacheValue);
}

Utilizing Cache in Code

Magento 2 provides convenient methods and classes to utilize caching in your custom code. Let's explore how to use caching in code.

Cache Storage

Magento 2 uses the Magento\Framework\Cache\FrontendInterface class to interact with the cache storage. You can inject this class in your code to read from or write to the cache.

Example: To inject the cache storage in a class constructor:

use Magento\Framework\Cache\FrontendInterface;
 
class MyClass
{
protected $cache;
 
public function __construct(
FrontendInterface $cache
) {
$this->cache = $cache;
}
}

Reading from Cache

To read data from the cache, use the load($cacheKey) method of the cache storage. If the data is not found in the cache, you can fetch it from the original source and save it in the cache.

Writing to Cache

To write data to the cache, use the save($cacheValue, $cacheKey, $cacheTags, $cacheLifetime) method of the cache storage. Provide the cache value, cache key, associated cache tags (if any), and the cache lifetime in seconds.

Example: To save data in the cache:

$cacheKey = 'my_cache_key';
$cacheValue = 'my_cache_value';
$cacheTags = ['tag1', 'tag2'];
$cacheLifetime = 86400; // 24 hours
 
$this->cache->save($cacheValue, $cacheKey, $cacheTags, $cacheLifetime);

Conclusion

Understanding and effectively utilizing caching in Magento 2 can greatly improve the performance of your store. By configuring the appropriate cache types, managing cache strategies, and leveraging caching in your custom code, you can achieve faster response times and provide an optimal user experience for your customers.