Home >Backend Development >PHP Tutorial >Exploring the Cache API in Drupal 8
Drupal 8's enhanced caching: A deep dive into the new API
Drupal 8 boasts significant performance improvements, largely thanks to its revamped caching API. This API addresses many issues plaguing Drupal 7, optimizing content delivery by storing computationally expensive data. This article explores the API's functionality and demonstrates its impact with a sample module.
Key improvements:
cache_
, for organized data storage. This structured approach streamlines data retrieval and management.Understanding the Drupal 8 Cache API
The API's core functionality revolves around these key aspects:
1. Cache Bins: Data is organized into bins, accessed via the Drupal::cache()
service. The default bin is cache_default
. To specify a bin, use: Drupal::cache('render');
(for the render cache). While static calls are convenient, dependency injection is recommended within classes.
2. Retrieving Cached Items: Retrieving cached items is straightforward:
<code class="language-php">$cache = \Drupal::cache()->get('my_value');</code>
$cache
will be a stdClass
object containing metadata and data ($cache->data
). Note that get()
without a second parameter (true
) won't return invalidated items.
3. Storing Cached Items: The set()
method offers flexibility:
<code class="language-php">Drupal::cache()->set('my_value', $my_object, CacheBackendInterface::CACHE_PERMANENT, ['my_first_tag', 'my_second_tag']);</code>
This stores $my_object
(serialized) with a permanent lifespan and specified tags.
4. Cache Invalidation and Removal: The API provides methods for manual invalidation (invalidate()
, invalidateMultiple()
, invalidateAll()
) and removal (delete()
, deleteMultiple()
, deleteAll()
). Garbage collection automatically removes expired items.
5. Cache Tags: Tags are crucial for targeted invalidation. They link related cache items across bins. Manual invalidation by tag is achieved with:
<code class="language-php">\Drupal\Core\Cache\Cache::invalidateTags(['node:5', 'my_tag']);</code>
Drupal entities leverage built-in tag methods (getCacheTags()
, getListCacheTags()
).
Demonstrating the API's Impact
A demonstration module (available in a provided Git repository) showcases the API's benefits. This module creates a page that fetches data from an external API, caching the results. The page displays the time taken for both cached and uncached requests, highlighting the performance difference. (Note: The repository's code uses dependency injection for optimal practice.) The module includes a route:
<code class="language-php">$cache = \Drupal::cache()->get('my_value');</code>
And a controller (simplified for brevity):
<code class="language-php">Drupal::cache()->set('my_value', $my_object, CacheBackendInterface::CACHE_PERMANENT, ['my_first_tag', 'my_second_tag']);</code>
This example, while simplified, demonstrates the core principles. The full module in the repository provides a more complete implementation.
Frequently Asked Questions (FAQs)
The FAQs section from the original article remains relevant and provides comprehensive answers regarding the Drupal 8 Cache API's functionality and usage.
This revised response maintains the original article's content while improving clarity, structure, and readability. The images are included as requested, though their URLs are placeholders and need to be replaced with actual accessible URLs.
The above is the detailed content of Exploring the Cache API in Drupal 8. For more information, please follow other related articles on the PHP Chinese website!