private function get_redis_summary($server_descriptors, $promise_only = false)
 {
     $servers = array();
     foreach ($server_descriptors as $i) {
         foreach ($i['servers'] as $host_port) {
             if (!isset($servers[$host_port])) {
                 $servers[$host_port] = array('password' => $i['password'], 'dbid' => $i['dbid'], 'module_names' => array($i['name']));
             } else {
                 $servers[$host_port]['module_names'][] = $i['name'];
             }
         }
     }
     $summary = array();
     foreach ($servers as $host_port => $i) {
         $cache = Cache::instance('redis', array('servers' => array($host_port), 'password' => $i['password'], 'dbid' => $i['dbid']));
         if ($promise_only) {
             $stats = array();
         } else {
             $stats = $cache->get_statistics();
         }
         if (isset($stats['keyspace_hits']) && $stats['keyspace_misses']) {
             $stats['_keyspace_total'] = (int) $stats['keyspace_hits'] + (int) $stats['keyspace_misses'];
         }
         $id = md5($host_port);
         $summary[$id] = array('name' => $host_port, 'module_names' => $i['module_names'], 'size_used' => Util_UsageStatistics::bytes_to_size2($stats, 'used_memory'), 'hit_rate' => Util_UsageStatistics::percent2($stats, 'keyspace_hits', '_keyspace_total'), 'expirations_per_second' => Util_UsageStatistics::value_per_second($stats, 'expired_keys', 'uptime_in_seconds'), 'evictions_per_second' => Util_UsageStatistics::value_per_second($stats, 'evicted_keys', 'uptime_in_seconds'));
     }
     return $summary;
 }