diff --git a/cache.py b/cache.py index e0dc67d..e547178 100644 --- a/cache.py +++ b/cache.py @@ -56,7 +56,8 @@ class BaselineCache(Cache): evict = True self.cache[key] = val - self.cache.move_to_end(key) + # no need for this since this op appends key-val by default + # self.cache.move_to_end(key) return evict diff --git a/prefetch_cache.py b/prefetch_cache.py new file mode 100644 index 0000000..f5bd3f8 --- /dev/null +++ b/prefetch_cache.py @@ -0,0 +1,28 @@ +from cache import BaselineCache + +class PrefetchCache(BaselineCache): + key_relations = None + + def __init__(self): + super() + self.key_relations = dict() + + def put(self, key: str, val: str) -> bool: + # LRU evict + evict = False + if len(self.cache) >= self.limit: + self.cache.popitem(last = False) + evict = True + self.cache[key] = val + self.prefetch(key, val) + + return evict + + def prefetch(self, key: str, val: str) -> bool: + if len(self.cache) >= self.limit and key in self.key_relations: + self.cache[self.key_relations[key][0]] = self.key_relations[key][1] + return True + return False + + def set_relations(self): + return \ No newline at end of file