2016-05-26 12 views
0

memcached kann für eine statische Cachespeicherung Daten verwendet werden, die Datenbanksuche reduziert und in der Regel memcached.get(id) und memcached.set(id).Kann Memcached zum Sperren verwendet werden?

Aber ist es in Ordnung, dies für Verriegelungsmechanismen zu verwenden? Gibt memcache.set und memcached.get immer die Daten, wenn es vorhanden ist, oder gibt es nur None zurück, wenn die Anfrage zu viel Zeit in Anspruch nimmt?

möchte ich von einem id identifiziert den gleichzeitigen Zugriff auf eine bestimmte Ressource zu vermeiden, und ich verwende diese Logik:

def access(id): 
    if memcache.get(id): 
     return access 
    else: 
     memcache.set(id) 
     return true 

Wenn ein Benutzer diese Ressource zuzugreifen versucht, wenn memcache.get(id) = username einen Wert zurückgibt wir den Zugang sonst sinken Wir machen memcache.set(id) = username, um den nachfolgenden Zugriff zu stoppen und den Zugriff für den aktuellen Benutzer zu erlauben.

Ist es in Ordnung, memcached so zu verwenden? Will set und get tatsächlich geben Sie die Daten, wenn es unabhängig von der Zeit, die es dauert oder gibt es bestmögliche Ergebnis in der geringstmöglichen Zeit aus was auch immer ich gefunden habe (zum Beispiel: Guaranteed memcached lock) soweit ist der ehemaligen Kategorie und möglicherweise nicht Arbeit zum Sperren dachte, es könnte 99% der Zeit funktionieren.

Kann jemand klären und ob es alternative Schließmechanismen gibt?

Antwort

1

Für alle Interessierten habe ich einen Thread auf Memcache Github um Will memcached work reliably for implementing a locking mechanism? erstellt. Es erklärt einige der üblichen Vorbehalte unter Verwendung von get und set und wie man das unter Verwendung von add vermeiden kann. Einige Blogs erklären dieses Problem auch, wenn Sie in Ihrer bevorzugten Suchmaschine nach distributed locking mit memcache suchen können.

Es gibt auch eine verwandte Frage Memcached, Locking and Race Conditions, die helfen könnte, mehr Klarheit über Memcache Race-Bedingungen zu bekommen.

ist hier mehr Diskussionen zu diesem Thema im Memcache Forum:

Thread 1 und Thread 2

Verwandte Themen