async def METHOD_NAME(self):
    """
    Caches bags using big dicts.
    .. code-block:: python3
        {topic_name_1: subscriber_1, topic_name_2: subscriber_2, ...}
    Every 'time_step' seconds it will save all of the subscribers' most recent message.
    This will continue and will fill a cache array that will store 'pre_cache_time'
    seconds worth of messages before erasing the oldest messages.
    """
    # Used to avoid adding copies of the same message.
    last_timestamps = dict(self.cache_dict)
    while True:
        await self.nh.sleep(self.time_step)
        if self.dumping:
            await self.nh.sleep(1)
        # Add to cache
        msgs = []
        for key in self.cache_dict:
            msg = self.cache_dict[key].get_last_message()
            msg_time = await self.cache_dict[key].get_last_message_time()
            if msg is not None:
                if (self.nh.get_time() > rospy.Time.from_sec(30)) and (
                    msg_time < self.nh.get_time() - rospy.Duration(30)
                ):
                    # This fixes a negative time exception if we are within the first 30 seconds of time.
                    continue
                if msg_time == last_timestamps[key]:
                    continue
                last_timestamps[key] = msg_time
                msgs.append([key, (await msg), (await msg_time)])
            else:
                print(f"There's a problem caching {key}")
        self.write_to_cache(msgs)
    self.dump()