Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Das Django-REST-Framework antwortet auch nach leeren Redis-Schlüsseln immer noch mit zwischengespeicherten Daten

Die Anfrage von 4. trifft nicht einmal den Redis-Cache, weil sie einen lokalen Cache zurückgibt (beachten Sie den "From Disk Cache" im Antwortcode).

Sie sollten zwischen einem öffentlichen Cache (d. h. dem Server-Cache, der von allen Benutzern verwendet wird) und einem privaten Cache (dem Browser-Cache des Benutzers) unterscheiden.

Ich denke, bei der Verwendung von cache_page decorator speichert nicht nur die Anfrage, sondern setzt auch "Cache-control"-Antwortheader, um einen privaten Cache der Anfrage zu ermöglichen. Der Browser verwendet diese Header, um die Anforderung lokal zwischenzuspeichern und eine lokal zwischengespeicherte Antwort bis max-age zurückzugeben verfällt.

Um dieses Verhalten auf Serverebene zu verhindern, können Sie @never_cache verwenden decorator, der Cache-control setzt Antwortheader, um lokales Caching zu verhindern, oder verwenden Sie @cache_control(public=True) um nur den öffentlichen Cache der Anfrage zuzulassen (dies passt auch die Antwort-Header der Cache-Steuerung entsprechend an).

Mehr zum Steuern des Caches.