2017-06-15 32 views
0

我有一個使用redis的django應用程序,它目前用作Celery的代理程序,除此之外沒有任何其他信息。Django將查詢表移動到Redis

我想進一步利用它進行查找緩存。

比方說,我在我的數據庫中有一個廣泛使用的表,我一直在尋找查找。對於同樣的例子,假設它是美國郵政編碼到城市/州名稱的映射,或者隨着時間的推移實際上可能會發生變化的任何查找,這對我的應用程序很重要。

我的問題是:

  1. 一旦服務器啓動(在我的情況,Gunicorn),我該如何一次性從數據庫表中的數據加載到Redis的。我的意思是 - 我在哪裏以及如何讓這一次打電話? django框架中是否有這樣的「onload」調用?還是僅僅根據數據庫提供的第一個請求觸發它,但觸發整個表的Redis加載?

  2. 更新是怎麼回事?如果數據庫表以某種方式更新(例如刪除了行,更新了行,添加了行),那麼爲了更新它的Redis表示形式,我該如何捕獲它?

  3. 有沒有一個最佳實踐或圖書館已經適應了這一切?

回答

1

我怎麼一次性加載

對於一次負荷,你可以找到答案here(從這些答案只有urls.py工作對我來說)。但我更喜歡另一種場景。我會創建manage command,我會將此腳本添加到您啓動Gunicorn的命令中。例如,如果您使用的是systemd,則可以將其添加到service service config。您也可以將那些像add命令和urls.py

叫它什麼更新

這真的取決於你的數據庫。例如,如果您使用postgresql,則可以創建更新/插入/刪除和外部表的觸發器作爲redis。另外django有signal機制,所以你也可以在django中實現它。您也可以編寫自定義包裝器。在這個包裝中,你實現了操作+與redis同步。你會調用包裝而不是。但我更喜歡第一種情況。

有沒有一個最佳實踐或圖書館已準備好正確 ?

對不起,我不能幫你這個。