sql >> Database >  >> NoSQL >> Redis

Toegang tot Redis-sleutel blokkeren (ServiceStack)

Redis is een niet-blokkerende async-server, er is geen semantiek ingebouwd om redis te blokkeren op een clientverbinding tot een sleutel is gratis.

Opmerking:Redis is een externe NoSQL-gegevensopslag, daarom wordt elk slot dat u implementeert met redis 'gedistribueerd' door het ontwerp. AcquireLock van ServiceStack gebruikt redis' primitieve SETNX vergrendelingssemantiek om ervoor te zorgen dat slechts 1 clientverbinding het slot heeft, alle andere clients/verbindingen blijven geblokkeerd totdat het slot is vrijgegeven door een exponentiële back-off-multiplier voor opnieuw proberen te gebruiken om te pollen.

Om een ​​gedistribueerde vergrendeling te implementeren zonder polling, moet u een oplossing maken die een combinatie van SETNX + redis' Pub/Sub-ondersteuning gebruikt om wachtende klanten te informeren dat de vergrendeling is vrijgegeven.



  1. Mongoose-aggregatiequery mislukt in Jest/Mockgoose-test, werkt elders

  2. Async gebruiken in een transactie in de Spring-toepassing

  3. Moet ik voor elke verbinding een nieuwe Redis-client maken?

  4. MongoDB Document opnieuw vormgeven