如何从django中的低级缓存API中删除特定键

时间:2012-06-13 16:05:45

标签: python django

在我的django应用中,我正在使用低级缓存api

from django.core.cache import cache

有一种情况是,我需要删除一个特定的密钥而不是清除整个缓存。这里的问题是我不知道密钥名称 - but only that the keyname starts with a particular username string

damon_my222cachekey是缓存中存在的一个密钥。我只知道它以一个字符串damon_开始。我有一些方法可以告诉缓存到delete a key,从那开始特别的字符串?

如果有像cache.keys()这样的方法,我可以用regex表达式从返回的列表中获取keyname

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

只有这样才能创建两级缓存。在这种方法中,您实际上不会删除密钥但会使它们无法访问(缓存会在一段时间内自动删除它们)。

def get_user_version(username):
    version = cache.get("%s_version" % username)
    if version is None:
        version = random.randint(1, 1000000000)
        cache.set("%s_version" % username, version)
    return version

def get_user_cache(username, key):
    version = get_user_version(username)
    return cache.get("%s_%d_%s" % (username, version, key))

def set_user_cache(username, key, value):
    version = get_user_version(username)
    cache.set("%s_%d_%s" % (username, version, key), value)

def invalidate_user_cache(username):
    version = cache.incr("%s_version" % username)

好处是你可以轻松地为用户无效缓存。缺点是您发出两个缓存请求而不是一个。