Ich verwende Caching auf der Serializer-Ebene, die meist genau so funktioniert, wie ich es möchte (z. B. die Änderungen am updated_at des Modells und der zugehörige Serializer werden im Cache ungültig gemacht).Was ist der empfohlene Ansatz zum Invalidieren des Cache auf active_model_serializers 0.10.0?
In einigen Fällen muss ich jedoch in der Lage sein, einen bestimmten Serializer manuell zu targetieren und dessen Cache ungültig zu machen. Als Beispiel erstellen wir derzeit eine Frage-und-Antwort-Funktion, der Frage-Serializer enthält last_answer_at und answer_count. Ich möchte, dass die Frage so lange wie möglich zwischengespeichert wird, da sie sich selten ändert. Wenn jedoch eine neue Antwort erstellt oder eine vorhandene Antwort gelöscht wird, möchte ich die zugehörige Frage gezielt ansprechen und deren Cache ungültig machen können.
Ich habe das ein bisschen untersucht und festgestellt, dass Sie den Cache-Schlüssel unter Verwendung erhalten können:
serializer = QuestionSerializer.new(self)
adapter = ActiveModelSerializers::Adapter.create(serializer)
cache_key = serializer.cache_key(adapter)
jedoch, dass nicht die Attribute Teil des Cache Schlüssel enthält.
Was ich hoffe, hier zu erreichen, besteht darin, dass ein übergeordnetes Objekt (in meinem Beispiel eine Frage), ein Verfahren, wie beispielsweise enthalten würde:
def clear_cache
Rails.cache.clear(cache_key)
end
def cache_key
serializer = QuestionSerializer.new(self)
adapter = ActiveModelSerializers::Adapter.create(serializer)
serializer.cache_key(adapter)
end
... und in meinem Kind-Objekt, rufen Sie es beim Erstellen oder Löschen von Antworten.
after_create :clear_parent_cache
def clear_parent_cache
question.clear_cache
end
Gibt es einen besseren Weg, dies zu tun? Können Sie einen Weg empfehlen, den korrekten Cacheschlüssel konsistent zu erhalten?
Danke, Dan
Hinweis: Diese auch als ein Problem auf dem Github Repo (https://github.com/rails-api/active_model_serializers/issues/1816) angehoben wird, hier zu veröffentlichen, es ist ein breiteres Publikum zu gewährleisten sichtbar.