def set(self, key: CacheKey, value: Optional[CacheValue]) -> None:
        r"""Create or update a cache.

        :param key: A key string to create or update.
        :type key: :const:`CacheKey`
        :param value: A value to cache.  :const:`None` to remove cache.
        :type value: :class:`~typing.Optional`\ [:const:`CacheValue`]

        """
        raise NotImplementedError(
            'Concreate subclasses of {0.__module__}.{0.__qualname__} have to '
            'override .set() method'.format(CachePolicy)
        )
r"""Create or update a cache.

        :param key: A key string to create or update.
        :type key: :const:`CacheKey`
        :param value: A value to cache.  :const:`None` to remove cache.
        :type value: :class:`~typing.Optional`\ [:const:`CacheValue`]