Frage

Von meinem Verständnis, jede dieser Methoden: get() und put() Atom

.

Aber, wenn Caches wie ehcache & Memcached, in einer Art und Weise CheckThenAct Zugriff auf Rennbedingungen entstehen.

Was sollten wir synchronisieren auf, um sicherzustellen, dass, wenn thread1 eine Get() tut und thread2 eine Get() tut ein Put() gefolgt, dass die erste Get() den neuen Wert von thread2 hinzugefügt werden?

War es hilfreich?

Lösung

Die Art und Weise, diese Art von Situation zu handhaben ist, nicht von mehreren Stellen schreibt zu zwischenzuspeichern oder Zugriff auf andere Weise zu steuern.

Eine einfache Lösung für dieses Problem ist nicht von Ihren Kunden in den Cache alle Schreibvorgänge zu tun. Stattdessen, wenn Sie den Wert aktualisieren möchten feuern Sie eine Anforderung aus aktualisiert, um den Wert zu haben. Wenn dieser Wert von woanders abgerufen wird, dann kann dies gut funktionieren. Wenn es berechnet wird oder auf andere Weise von dem Client kommt dann kann es problematisch sein.

ein gemeinsames Bauteil zu verwenden, um mit memcache-zumindest in der PHP-Welt wird als verteiltes Arbeitswarteschlangenprozessor beanstalkd. In diesem Szenario können Sie eine „Update-Cache“ Anforderung als eine Arbeitseinheit abfeuern.

Wenn Sie eine Operation auf dem Cache-Eintrag tun, die den vorhandenen Wert als Eingang oder auf andere Weise ein Rennen verwendet Bedingung einführen würde, wenn get-dann-Update nicht eine atomare Operation ist, eine Alternative ist ein erstellen Arbeitseinheit, die den alten Wert und den neuen Wert enthält. Auf diese Weise, was auch immer Prozess behandelt das Updates ungültig oder auf andere Weise, diese Situationen bewältigen, wo der aktuelle Wert nicht der erwartete Wert ist.

Inkrementieren und Dekrementieren des Memcached-Schnittstelle behandelt wird also, wenn Ihre Zugriffe dieser Art sind (oder können auf diese Art der Operation reduziert werden), dann, dass das Problem auch gelöst werden.

Andere Tipps

Für Memcached Sie die cas () Betrieb nutzen können vor tun die Put zu überprüfen (), dass eine weitere Operation, die Daten nicht aktualisiert hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top