'Gets the object specified by key.  It will also unserialize the object
before returning if it is serialized in memcache with JSON, or if it
is pickled and unpickling is allowed.
:param key: key
:returns: value of the key in memcache'

def get(self, key):

    key = md5hash(key)
    value = None
    for (server, fp, sock) in self._get_conns(key):
        try:
            with Timeout(self._io_timeout):
                sock.sendall(('get    %s\r\n' % key))
                line = fp.readline().strip().split()
                while (line[0].upper() != 'END'):
                    if ((line[0].upper() == 'VALUE') and (line[1] == key)):
                        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)
                        fp.readline()
                    line = fp.readline().strip().split()
                self._return_conn(server, fp, sock)
                return value
        except (Exception, Timeout) as e:
            self._exception_occurred(server, e, sock=sock, fp=fp)
