我想要做的是将缓存中的某些值标记为相关,以便我可以立即删除它们.例如,当我向数据库插入一个新条目时,我想删除缓存中基于数据库中旧值的所有内容.
我总是可以使用cache.clear(),但它对我来说似乎太残酷了.或者我可以将相关值存储在字典中并缓存此字典.或者我可以在缓存中的额外字段中维护某种索引.但是一切似乎对我来说很复杂(最终会变慢?).
你认为呢?有没有现成的解决方案?或者我的方法是错的?谢谢你的回答.
你在使用缓存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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |