2017-06-15 5 views
0

Ich habe eine Django-App mit Redis, die derzeit als Broker für Sellerie verwendet wird, und nichts darüber hinaus.Django Moving Lookup-Tabelle zu Redis

Ich möchte es weiter für Lookup-Caching verwenden.

Nehmen wir an, ich hatte eine weit verbreitete Tabelle in meiner Datenbank, die ich für Nachschlagezwecke treffe. Nehmen wir zum Beispiel an, dass es sich um eine Zuordnung von US-Postleitzahlen zu Stadt-/Staatsnamen handelt oder um eine Suche, die sich im Laufe der Zeit ändern kann, was für meine Anwendung wichtig ist.

Meine Fragen sind:

  1. Sobald der Server startet (in meinem Fall, Gunicorn), wie kann ich eine Zeit die Daten aus der Datenbanktabelle zu Redis laden. Ich meine - wo und wie mache ich diesen einmaligen Anruf? Gibt es im Django-Framework einen Platz für solche "Onload" -Aufrufe? Oder trighe ich es einfach bei der ersten Anfrage, die von der Datenbank geliefert wird, aber eine Redis-Last der gesamten Tabelle auslöst?

  2. Was ist mit Updates? Wenn die Datenbanktabelle irgendwie aktualisiert wird (z. B. Zeile gelöscht, Zeile aktualisiert, Zeile hinzugefügt), wie kann ich das feststellen, um die Redis-Darstellung zu aktualisieren?

  3. Gibt es bereits eine Best-Practice oder Bibliothek, die genau darauf ausgerichtet ist?

Antwort

1

wie kann ich eine einmalige Belastung

Für die eine Zeitbelastung Sie here Antwort finden (von diesen Antworten nur urls.py für mich gearbeitet). Aber ich bevorzuge ein anderes Szenario. Ich würde manage command erstellen und ich würde dieses Skript dem Befehl hinzufügen, den Sie Ihr Gunicorn starten. Wenn Sie beispielsweise systemd verwenden, können Sie dies der Service-Service-Konfiguration hinzufügen. Sie können auch diejenigen kombinieren, wie Befehl hinzufügen und rufen es aus urls.py

Was Updates

Es ist wirklich auf Ihrer Datenbank abhängt. Wenn Sie zum Beispiel postgresql verwenden, können Sie einen Trigger für update/insert/delete und eine externe Tabelle als redis erstellen. Auch Django hat signal Mechanismus, so dass Sie das auch in Django implementieren können. Sie können auch Ihren benutzerdefinierten Wrapper schreiben. In diesem Wrapper implementieren Sie Ihre Operationen + Synchronisierung mit Redis. Und Sie würden Wrapper anstelle von nennen. Aber ich bevorzuge das erste Szenario.

Gibt es eine Best-Practice oder Bibliothek bereits genau ausgerichtet auf das?

Entschuldigung, ich kann Ihnen mit diesem nicht helfen.