Bases: Generic[KeyT, ValueT]
Simple LRU Cache.
Parameters:
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 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
|