Add an event to event store.

        All events were stored in a sorted set in redis with timestamp as
        rank  score.

        :param event: the event to be added, format should be ``table_action``
        :param pk: the primary key of event
        :param ts: timestamp of the event, default to redis_server's
         current timestamp
        :param ttl: the expiration time of event since the last update
        :return: bool

def add(self, event, pk, ts=None, ttl=None):
        """Add an event to event store.

        All events were stored in a sorted set in redis with timestamp as
        rank  score.

        :param event: the event to be added, format should be ``table_action``
        :param pk: the primary key of event
        :param ts: timestamp of the event, default to redis_server's
         current timestamp
        :param ttl: the expiration time of event since the last update
        :return: bool
        """
        key = self._keygen(event, ts)
        try:
            self._zadd(key, pk, ts, ttl)
            return True
        except redis.ConnectionError as e:
            # connection error typically happens when redis server can't be
            # reached or timed out, the error will be silent with an error
            # log and return None.
            self.logger.error(
                "redis event store failed with connection error %r" % e)
            return False