Change LRUCache to be tree-based so we can delete subtrees.

This commit is contained in:
David Baker 2016-01-21 19:16:25 +00:00
parent 297eded261
commit f1f8122120
7 changed files with 140 additions and 52 deletions

View file

@ -38,7 +38,7 @@ class Cache(object):
def __init__(self, name, max_entries=1000, keylen=1, lru=True):
if lru:
self.cache = LruCache(max_size=max_entries)
self.cache = LruCache(max_size=max_entries, keylen=keylen)
self.max_entries = None
else:
self.cache = OrderedDict()
@ -99,6 +99,15 @@ class Cache(object):
self.sequence += 1
self.cache.pop(key, None)
def invalidate_many(self, key):
self.check_thread()
if not isinstance(key, tuple):
raise TypeError(
"The cache key must be a tuple not %r" % (type(key),)
)
self.sequence += 1
self.cache.del_multi(key)
def invalidate_all(self):
self.check_thread()
self.sequence += 1