由於@ 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 –