在我的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
任何帮助表示赞赏
答案 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)
好处是你可以轻松地为用户无效缓存。缺点是您发出两个缓存请求而不是一个。