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

Zugriff auf Redis-Schlüssel blockieren (ServiceStack)

Redis ist ein nicht blockierender asynchroner Server, es gibt keine in Redis integrierte Semantik, um eine Client-Verbindung bis zu einem Schlüssel zu blockieren ist kostenlos.

Hinweis:Redis ist ein Remote-NoSQL-Datenspeicher, daher wird jede Sperre, die Sie mit Redis implementieren, per Design „verteilt“. AcquireLock von ServiceStack verwendet das primitive SETNX von redis Sperrsemantik, um sicherzustellen, dass nur 1 Client-Verbindung die Sperre hat, alle anderen Clients/Verbindungen bleiben blockiert, bis die Sperre aufgehoben wurde, indem ein exponentieller Wiederholungs-Backoff-Multiplikator für die Abfrage verwendet wird.

Um eine verteilte Sperre ohne Polling zu implementieren, müssten Sie eine Lösung erstellen, die eine Kombination aus SETNX und der Pub/Sub-Unterstützung von redis verwendet, um wartende Clients zu benachrichtigen, dass die Sperre aufgehoben wurde.