2

在我的 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() 这样的方法,我可以使用正则表达式从返回的列表中获取键名

任何帮助表示赞赏

4

1 回答 1

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)

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

于 2012-06-13T20:03:58.767 回答