Skip to content

proxystore.store.cache

Simple Cache Implementation.

LRUCache

LRUCache(maxsize: int = 16)

Bases: Generic[KeyT, ValueT]

Simple LRU Cache.

Parameters:

  • maxsize (int, default: 16 ) –

    Maximum number of value to cache.

Raises:

Source code in proxystore/store/cache.py
def __init__(self, maxsize: int = 16) -> None:
    if maxsize < 0:
        raise ValueError('Cache size must by >= 0')
    self.maxsize = maxsize
    self.data: dict[KeyT, ValueT] = {}
    self.lru: list[KeyT] = []

    # Count hits/misses
    self.hits = 0
    self.misses = 0

evict()

evict(key: KeyT) -> None

Evict key from cache.

Source code in proxystore/store/cache.py
def evict(self, key: KeyT) -> None:
    """Evict key from cache."""
    if key in self.data:
        del self.data[key]
        self.lru.remove(key)

exists()

exists(key: KeyT) -> bool

Check if key is in cache.

Source code in proxystore/store/cache.py
def exists(self, key: KeyT) -> bool:
    """Check if key is in cache."""
    return key in self.data

get()

get(
    key: KeyT, default: ValueT | None = None
) -> ValueT | None

Get value for key if it exists else returns default.

Source code in proxystore/store/cache.py
def get(self, key: KeyT, default: ValueT | None = None) -> ValueT | None:
    """Get value for key if it exists else returns default."""
    if self.exists(key):
        # Move to front b/c most recently used
        self.hits += 1
        self.lru.remove(key)
        self.lru.insert(0, key)
        return self.data[key]
    else:
        self.misses += 1
        return default

set()

set(key: KeyT, value: ValueT) -> None

Set key to value.

Source code in proxystore/store/cache.py
def set(self, key: KeyT, value: ValueT) -> None:
    """Set key to value."""
    if self.maxsize == 0:
        return
    if len(self.data) >= self.maxsize:
        lru_key = self.lru.pop()
        del self.data[lru_key]
    self.lru.insert(0, key)
    self.data[key] = value