2017-10-12 61 views
1

假設,如果我在redis緩存或任何其他緩存中有密鑰,並且該密鑰有大量GET查詢。密鑰的值取決於模型(表格)中的數據。現在,如果通過某個進程,與該密鑰關聯的值在數據庫中更新,那麼我可以使緩存失效的方式有哪些。更新表中的緩存失效

回答

3

您可以使用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這樣的軟件包。

+0

hi @jacob感謝一個更多的事情任何想法,如果幾乎在GET請求被調用時同時產生信號,那麼哪一個會得到優先級? –

+0

@UkkarshSrivastav您的Django Web應用程序工作人員在不同的進程中運行,因此他們不應該相互「競爭」。 Redis的「刪除」操作應該是有效的。除非你解決一個非常不尋常的用例,否則它不應該成爲一個問題。 –