0

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?

2 Answers 2

1

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.

0

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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