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
    Returns:
        The value associated with ``key`` if it exists and is not expired, else
        ``None``
    """
    path = self._path_from_key(key)
    storage_obj = await self._load_from_path(path)
    if not storage_obj:
        return None
    if storage_obj.expired:
        await path.unlink(missing_ok=True)
        return None
    if renew_for and storage_obj.expires_at:
        await self.set(key, value=storage_obj.data, expires_in=renew_for)
    return storage_obj.data