I set some data in cache using cache_set($cache_id, $temp_data, 'cache', CACHE_TEMPORARY);
from a custom module. It's cleared when I clear all the cache.
Is there any way I can clear that specific cached data using its ID?
Despite the name, cache_clear_all()
doesn't necessarily clear all the cache; it does so only when no parameter is passed to the function.
Usually Drupal core uses cache_clear_all()
to clear all the cache. In some cases, it uses that function to clear a specific cache item, which is what Drupal core does in variable_set()
, for example.
function variable_set($name, $value) {
global $conf;
db_merge('variable')->key(array('name' => $name))
->fields(array('value' => serialize($value)))
->execute();
cache_clear_all('variables', 'cache_bootstrap');
$conf[$name] = $value;
}
In that code, the cache ID of the deleted item is variables, which is contained in the cache_bootstrap cache bin.
As side note, cache_clear_all()
could be also used to delete all the cache items whose IDs start with the string passed as first argument. For example, cache_clear_all('mymodule_', 'cache', TRUE)
would delete the cache items whose cache IDs are mymodule_cached_data or mymodule_long_calculus_result, for example. It won't delete a cache item whose ID is user_cached_data, for example.