Используете ли вы кеш API?Похоже на это.
Этот пост , который указал мне на эти слайды , помог мне создать хорошую систему кэширования поколений, которая позволила бы мне создать нужную иерархию.
Короче говоря, вы храните ключ генерации (например, group
) в своем кеше и включаете значение, сохраненное в вашу функцию создания ключа, чтобы вы могли сделать недействительным целый набор ключей одновременно.
С помощью этой базовой концепции вы можете создать очень сложные иерархии или просто простую систему групп.
Например:
class Cache(object):
def generate_cache_key(self, key, group=None):
"""
Generate a cache key relating them via an outside source (group)
Generates key such as 'group-1:KEY-your-key-here'
Note: consider this pseudo code and definitely incomplete code.
"""
key_fragments = [('key', key)]
if group:
key_fragments.append((group, cache.get(group, '1')))
combined_key = ":".join(['%s-%s' % (name, value) for name, value in key_fragments)
hashed_key = md5(combined_key).hexdigest()
return hashed_key
def increment_group(self, group):
"""
Invalidate an entire group
"""
cache.incr(group)
def set(self, key, value, group=None):
key = self.generate_cache_key(key, group)
cache.set(key, value)
def get(self, key, group=None):
key = self.generate_cache_key(key, group)
return cache.get(key)
# example
>>> cache = Cache()
>>> cache.set('key', 'value', 'somehow_related')
>>> cache.set('key2', 'value2', 'somehow_related')
>>> cache.increment_group('somehow_related')
>>> cache.get('key') # both invalidated
>>> cache.get('key2') # both invalidated