Here are some random useful snippets for dealing with caches in Drupal 8, just because I keep having to dig them up from the API.
I'll try to add more here as I go.
Set an expiring cache item
\Drupal::cache()->set('cache_key', 'cache_data', $expiration_timestamp);
Set a permanent cache item
\Drupal::cache()->set('cache_key', 'cache_data', CacheBackendInterface::CACHE_PERMANENT);
Set a permanent cache item with tags
\Drupal::cache()->set('cache_key', 'cache_data', CacheBackendInterface::CACHE_PERMANENT, array('tag_one', 'second_tag'));
Fetch an item from the cache
$cache = \Drupal::cache()->get('cache_key');
if (!empty($cache->data) {
// Do something with $cache->data here.
}
(Note that in Drupal 8 you don't have to manually check to make sure the cache isn't expired, thanks to this issue)
Invalidate a cache item
\Drupal::cache()->invalidate('cache_key');
Invalidate multiple cache items
\Drupal::cache()->invalidateMultiple($array_of_cache_ids);
Invalidate specific cache tags
This one allows you to pass in an array of cache tags to invalidate manually.
use Drupal\Core\Cache\Cache;
Cache::invalidateTags(['config:block.block.YOURBLOCKID', 'config:YOURMODULE.YOURCONFIG', 'node:YOURNID']);
Note that the invalidation functions also exist for deleting caches, by just replacing invalidate
with delete
.
Flush the entire site cache
This one is still the same as Drupal 7.
drupal_flush_all_caches();
The end!