function memcache_stampede_protected in Memcache API and Integration 6
Determines whether stampede protection is enabled for a given bin/cid.
Memcache stampede protection is primarily designed to benefit the following caching pattern: a miss on a cache_get for a specific cid is immediately followed by a cache_set for that cid. In cases where this pattern is not followed, stampede protection can be disabled to avoid long hanging locks. For example, a cache miss in Drupal core's module_implements() won't execute a cache_set until drupal_page_footer() calls module_implements_write_cache() which can occur much later in page generation.
Parameters
string $cid: The cache id of the data to retrieve.
string $bin: The bin the data is stored in.
Return value
bool Returns TRUE if stampede protection is enabled for that particular cache bin/cid, otherwise FALSE.
1 call to memcache_stampede_protected()
- cache_get in ./
memcache.inc  - Return data from the persistent cache.
 
File
- ./
memcache.inc, line 517  
Code
function memcache_stampede_protected($cid, $bin) {
  $ignore_settings = variable_get('memcache_stampede_protection_ignore', array(
    // Disable stampede protection for specific cids in 'cache_bootstrap'.
    'cache' => array(
      // Variables have their own lock protection.
      'variables',
      // I18n uses a class destructor to write the cache.
      'i18n:string:*',
    ),
  ));
  // Support ignoring an entire bin.
  if (in_array($bin, $ignore_settings)) {
    return FALSE;
  }
  // Support ignoring by cids.
  if (isset($ignore_settings[$bin])) {
    // Support ignoring specific cids.
    if (in_array($cid, $ignore_settings[$bin])) {
      return FALSE;
    }
    // Support ignoring cids starting with a suffix.
    foreach ($ignore_settings[$bin] as $ignore) {
      $split = explode('*', $ignore);
      if (count($split) > 1 && strpos($cid, $split[0]) === 0) {
        return FALSE;
      }
    }
  }
  return TRUE;
}