diff --git a/.memcache.inc.swp b/.memcache.inc.swp
index d947a6d..e2f50f3 100644
Binary files a/.memcache.inc.swp and b/.memcache.inc.swp differ
diff --git a/memcache.inc b/memcache.inc
index bcb6b77..ed93b69 100644
--- a/memcache.inc
+++ b/memcache.inc
@@ -146,13 +146,19 @@ class MemCacheDrupal implements DrupalCacheInterface {
 
   /**
    * Hash/chunk the cid so we don't have a single lock for the entire bin.
-   * TODO: Finding a more effective way to hash the cid could allow us to
-   * perform fewer lookups on gets.
+   * Adaptive hashing -- the longer the $cid, the more we skip characters in
+   * order to spread out where we're taking samples from.
    */
   private function hash_cid($cid) {
     static $hashes = array();
     if (!isset($hashes[$cid])) {
-      $hashes[$cid] = explode(',', chunk_split(str_pad($cid, 9, 'a'), 3, ','));
+      $values = '';
+      $inc = ceil(strlen($cid) / 9);
+      for ($i = 0; $i < 9; $i++) {
+        $key = $i * $inc;
+        $values .= isset($cid[$key]) ? $cid[$key] : '.';
+      }
+      $hashes[$cid] = explode(',', chunk_split($values, 3, ','));
     }
     return $hashes[$cid];
   }
