:param new_data: a string representation of the data
        :param new_data_dt: a timezone aware datetime object giving
                the timestamp of the new_data
        :raise MemcachedException: if update failed

def updateCache(self, service, url, new_data, new_data_dt):
        """
        :param new_data: a string representation of the data
        :param new_data_dt: a timezone aware datetime object giving
                the timestamp of the new_data
        :raise MemcachedException: if update failed
        """
        key = self._get_key(service, url)

        # clear existing data
        try:
            value = self.client.get(key)
            if value:
                data = pickle.loads(value, encoding="utf8")
                if "time_stamp" in data:
                    cached_data_dt = parse(data["time_stamp"])
                    if new_data_dt > cached_data_dt:
                        self.client.delete(key)
                        # may raise MemcachedException
                        logger.info(
                            "IN cache (key: {}), older DELETE".format(key))
                    else:
                        logger.info(
                            "IN cache (key: {}), newer KEEP".format(key))
                        return
            else:
                logger.info("NOT IN cache (key: {})".format(key))

        except MemcachedException as ex:
            logger.error(
                "Clear existing data (key: {}) ==> {}".format(key, str(ex)))
            return

        # store new value in cache
        cdata, time_to_store = self._make_cache_data(
            service, url, new_data, {}, 200, new_data_dt)

        self.client.set(key, cdata, time=time_to_store)
        # may raise MemcachedException
        logger.info(
            "MemCached SET (key {}) for {:d} seconds".format(
                key, time_to_store))