1
假設,如果我在redis緩存或任何其他緩存中有密鑰,並且該密鑰有大量GET查詢。密鑰的值取決於模型(表格)中的數據。現在,如果通過某個進程,與該密鑰關聯的值在數據庫中更新,那麼我可以使緩存失效的方式有哪些。更新表中的緩存失效
假設,如果我在redis緩存或任何其他緩存中有密鑰,並且該密鑰有大量GET查詢。密鑰的值取決於模型(表格)中的數據。現在,如果通過某個進程,與該密鑰關聯的值在數據庫中更新,那麼我可以使緩存失效的方式有哪些。更新表中的緩存失效
您可以使用Django signals編寫接收器函數來偵聽post_save
信號並清除關聯的緩存。例如:
from django.db.models.signals import post_save
@receiver(post_save, sender=Item)
def my_handler(sender, instance, created, **kwargs):
r.delete('item/%d' % instance.pk)
更強大的解決方案是使用像django-cacheops這樣的軟件包。
hi @jacob感謝一個更多的事情任何想法,如果幾乎在GET請求被調用時同時產生信號,那麼哪一個會得到優先級? –
@UkkarshSrivastav您的Django Web應用程序工作人員在不同的進程中運行,因此他們不應該相互「競爭」。 Redis的「刪除」操作應該是有效的。除非你解決一個非常不尋常的用例,否則它不應該成爲一個問題。 –