async def METHOD_NAME(self, key: str, renew_for: int | timedelta | None = None) -> bytes | None:
    """Get a value.
    Args:
        key: Key associated with the value
        renew_for: If given and the value had an initial expiry time set, renew the
            expiry time for ``renew_for`` seconds. If the value has not been set
            with an expiry time this is a no-op. Atomicity of this step is guaranteed
            by using a lua script to execute fetch and renewal. If ``renew_for`` is
            not given, the script will be bypassed so no overhead will occur
    Returns:
        The value associated with ``key`` if it exists and is not expired, else
        ``None``
    """
    key = self._make_key(key)
    if renew_for:
        if isinstance(renew_for, timedelta):
            renew_for = renew_for.seconds
        data = await self._get_and_renew_script(keys=[key], args=[renew_for])
        return cast("bytes | None", data)
    return await self._redis.METHOD_NAME(key)