'Gets multiple values from memcache for the given keys.
:param keys: keys for values to be retrieved from memcache
:param server_key: key to use in determining which server in the ring
is used
:returns: list of values'

def get_multi(self, keys, server_key):

    server_key = md5hash(server_key)
    keys = [md5hash(key) for key in keys]
    for (server, fp, sock) in self._get_conns(server_key):
        try:
            with Timeout(self._io_timeout):
                sock.sendall(('get    %s\r\n' % '    '.join(keys)))
                line = fp.readline().strip().split()
                responses = {}
                while (line[0].upper() != 'END'):
                    if (line[0].upper() == 'VALUE'):
                        size = int(line[3])
                        value = fp.read(size)
                        if (int(line[2]) & PICKLE_FLAG):
                            if self._allow_unpickle:
                                value = pickle.loads(value)
                            else:
                                value = None
                        elif (int(line[2]) & JSON_FLAG):
                            value = json.loads(value)
                        responses[line[1]] = value
                        fp.readline()
                    line = fp.readline().strip().split()
                values = []
                for key in keys:
                    if (key in responses):
                        values.append(responses[key])
                    else:
                        values.append(None)
                self._return_conn(server, fp, sock)
                return values
        except (Exception, Timeout) as e:
            self._exception_occurred(server, e, sock=sock, fp=fp)
