--- dmemcache.inc.orig +++ dmemcache.inc @@ -335,14 +335,7 @@ function dmemcache_object($bin = NULL, $flush = FALSE) { } function dmemcache_key($key, $bin = 'cache') { - static $prefix; - // memcache_key_prefix can be set in settings.php to support site namespaces - // in a multisite environment. - if (empty($prefix)) { - if ($prefix = variable_get('memcache_key_prefix', '')) { - $prefix .= '-'; - } - } + $prefix = dmemcache_key_prefix($bin); $full_key = urlencode($prefix . $bin . '-' . $key); // Memcache only supports key lengths up to 250 bytes. If we have generated @@ -354,3 +347,33 @@ function dmemcache_key($key, $bin = 'cache') { return $full_key; } + +function dmemcache_key_prefix($bin = 'cache') { + static $prefixes = array(); + + // Do we need to load the prefixes? + if (empty($prefixes)) { + $prefixes['default'] = ''; + + // memcache_key_prefix can be set in settings.php to support site namespaces + // in a multisite environment. + if ($prefix_var = variable_get('memcache_key_prefix', '')) { + if (is_array($prefix_var)) { + foreach ($prefix_var as $bin_name => $prefix) { + $prefixes[$bin_name] = $prefix .'-'; + } + } + else { + $prefixes['default'] = $prefix_var .'-'; + } + } + + } + + // Try to use a specific prefix + if (isset($prefixes[$bin])) { + return $prefixes[$bin]; + } + + return $prefixes['default']; +}