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?


You can pass a cid to cache_clear_all() to clear a specific bin.


To delete from the cache the cache item set with cache_set($cache_id, $temp_data, 'cache', CACHE_TEMPORARY); it's enough to call cache_clear_all($cache_id, 'cache');. 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().

function variable_set($name, $value) {
  global $conf;
  db_merge('variable')->key(array('name' => $name))
    ->fields(array('value' => serialize($value)))
  cache_clear_all('variables', 'cache_bootstrap');
  $conf[$name] = $value;

In that code, the deleted cache item is the one whose cache ID is variables, 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 having mymodule_cached_data or mymodule_long_calculus_result as cache ID.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.