gpt4 book ai didi

django - Django 中的分层缓存

转载 作者:行者123 更新时间:2023-12-04 19:19:58 24 4
gpt4 key购买 nike

我想要做的是将缓存中的一些值标记为相关,以便我可以立即删除它们。例如,当我向数据库插入一个新条目时,我想删除缓存中基于数据库中旧值的所有内容。

我总是可以使用 cache.clear() 但它对我来说似乎太残酷了。或者我可以将相关值一起存储在字典中并缓存该字典。或者我可以在缓存的额外字段中维护某种索引。但对我来说一切似乎都很复杂(最终很慢?)。

你认为呢?有没有现有的解决方案?还是我的方法不对?感谢您的回答。

最佳答案

你在使用缓存api吗?听起来很像。

This post ,这使我指向 these slides帮助我创建了一个很好的分代缓存系统,让我可以创建我想要的层次结构。

简而言之,您将生成 key (例如 group)存储在缓存中,并将存储的值合并到您的 key 创建函数中,以便您可以一次使整个 key 集无效。

有了这个基本概念,您可以创建高度复杂的层次结构或只是一个简单的组系统。

例如:

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

关于django - Django 中的分层缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com