--- 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'];
+}
