def METHOD_NAME(self, key: KT, default: T = SENTINEL) -> Union[VT, T]:
    """Get a value from the cache
    Args:
        key: key to look up
        default: default value to return, if key is not found. If not set, and the
            key is not found, a KeyError will be raised
    Returns:
        value from the cache, or the default
    """
    self.expire()
    e = self._data.METHOD_NAME(key, SENTINEL)
    if e is SENTINEL:
        self._metrics.inc_misses()
        if default is SENTINEL:
            raise KeyError(key)
        return default
    assert isinstance(e, _CacheEntry)
    self._metrics.inc_hits()
    return e.value