Tatsächlicher Datenspeicher und Cache sollten mit dem dritten Ansatz synchronisiert werden, den Sie bereits in Ihrer Frage beschrieben haben.
Wenn Sie Daten zu Ihrem endgültigen Speicher (d. h. Ihrer SQL-Datenbank) hinzufügen, müssen Sie diese Daten in einen Servicebus oder eine Nachrichtenwarteschlange einreihen und die gesamte Synchronisierung mithilfe eines Hintergrundprozesses von einem asynchronen Dienst durchführen lassen.
Sie möchten nicht in diese Fälle geraten (wenn Sie keinen Servicebus und keinen asynchronen Dienst verwenden):
- Verlangsamen Sie Ihre Anfragen oder Prozesse, da der Benutzer warten muss, bis die Daten sowohl in Ihrer Datenbank als auch im Cache gespeichert sind.
- Es besteht das Risiko, dass während des Caching-Prozesses ein Fehler auftritt und Sie keine Wiederholungsrichtlinie haben können (was normalerweise eine integrierte Funktion in einem Servicebus oder einigen Nachrichtenwarteschlangen ist). Außerdem kann dieser Fehler zu einer teilweisen oder vollständigen Cache-Beschädigung führen, und Sie können nicht automatisch und einfach eine Aufgabe planen, um diese Situation zu beheben.
Über die Verwendung des Redis-Schlüsselablaufs ist es eine gute Idee. Da Redis Schlüssel mithilfe seines integrierten Mechanismus verfallen lassen kann, sollten Sie den Schlüsselablauf nicht aus dem gesamten Hintergrundprozess implementieren. Wenn ein Schlüssel existiert, ist er noch gültig.
Übrigens, Sie werden nicht immer in diesem Fall sein (wenn ein Schlüssel nicht abgelaufen ist, bedeutet dies, dass er nicht überschrieben werden sollte). Dies hängt möglicherweise von Ihrer tatsächlichen Domäne ab.