Files
2025-03-12 07:13:29 -04:00

42 lines
1.3 KiB
Python

from threading import Lock
import logging
logger = logging.getLogger(__name__)
class LRUCache:
"""Least Recently Used Cache implementation"""
def __init__(self, maxsize: int = 100):
self.cache = {}
self.maxsize = maxsize
self.access_order = []
self.lock = Lock()
def __getitem__(self, key):
with self.lock:
if key in self.cache:
# Move to end to mark as recently used
self.access_order.remove(key)
self.access_order.append(key)
return self.cache[key]
raise KeyError(key)
def __setitem__(self, key, value):
with self.lock:
if key in self.cache:
self.access_order.remove(key)
elif len(self.cache) >= self.maxsize:
# Remove least recently used item
lru_key = self.access_order.pop(0)
del self.cache[lru_key]
logger.debug(f"LRU cache evicted: {lru_key}")
self.cache[key] = value
self.access_order.append(key)
logger.debug(f"LRU cache set: {key}")
def clear(self):
with self.lock:
self.cache.clear()
self.access_order.clear()
logger.info("LRU cache cleared.")