由于@ e4c5提到缓存用于快速的东西,你应该使用相同的redis。但由于你的问题是关于数据库,我会回答相同的问题。
在Django中没有现成的函数来做到这一点。但是,然后Python的最好的部分是你可以轻松地猴路径添加新的功能。下面是一个测试请求我创建
def index(request):
cache.set("name", "tarun")
cache.set("name_1", "tarun")
cache.set("name2", "tarun")
cache.set("name_4", "tarun")
cache.set("nam", "tarun")
cache.clear(prefix="name")
nam = cache.get("nam")
name_4 = cache.get("name_4", default="deleted")
return HttpResponse("Hello, world. nam={nam}, name_4={name_4}".format(nam=nam, name_4=name_4))
要获得prefix
功能,你需要添加以下代码补丁在某些地方。我用settings.py
这样
original_clear = None
def patch_clear():
from django.db import connections, router
from django.core.cache.backends.db import DatabaseCache
def __clear(self, prefix=None, version=None):
db = router.db_for_write(self.cache_model_class)
connection = connections[db]
table = connection.ops.quote_name(self._table)
with connection.cursor() as cursor:
if prefix is None:
cursor.execute('DELETE FROM %s ' % table)
else:
prefix = self.make_key(prefix, version)
cursor.execute("DELETE FROM %s where cache_key like '%s%%'" % (table, prefix))
global original_clear
original_clear = DatabaseCache.clear
DatabaseCache.clear = __clear
patch_clear()
可能重复[从Django缓存中删除所有匹配键](https:// stackoverflow。com/questions/25292426/remove-all-matching-keys-from-django-cache) – lapinkoira
@lapinkoira,感谢您的链接。链接问题中的答案指出,它只适用于Django localmemcache。我正在使用Django的数据库缓存。我已经更新了答案以澄清。 – Wessi
您可以使用此链接来解决您的问题@Wessi。 https://drupal.stackexchange.com/questions/21434/how-do-i-clear-cache-using-an-sql-query –