sql >> Database teknologi >  >> NoSQL >> Redis

Sådan laver du grundlæggende WATCH med StackExchange.Redis

Årsagen til WATCH ikke eksponeres direkte er på grund af, hvordan SE.Redis er designet til at multiplekse kommandoer fra forskellige opkaldsstakke på en enkelt forbindelse. Dette gør det nødvendigt for ethvert transaktionsarbejde at være meget stramt styret.

Jeg ved ikke helt, hvad formålet med "uændret" ville være af sig selv , uden sammenligning med en eller anden kendt værdi - ellers opretter du bare en racetilstand. Det ville helt sikkert være muligt at tilføje support til det, men jeg vil virkelig gerne forstå den forventede use-case først. Kan du forklare?

Re din redigering; dit foretrukne eksempel (det sidste) er simpelthen ikke muligt med redis - intet at gøre med SE.Redis; hvis du laver en GET inde i en MULTI , får du ikke svaret før EXEC fuldfører - så du kan umuligt bruge værdien i SET :den er ikke tilgængelig endnu .

Hvis det ikke var for multipleksing, kunne du omarrangere dit andet eksempel (baseret på hvad SE.Redis gør) lidt:

WATCH key
val = GET key
MULTI
val = val + 1
SET key $val
EXEC

dette er det typiske brug af WATCH :du ser de ting, du forespørger på på forhånd, så ved du, at {key} er uændret under denne løkke (eller i det mindste vil transaktionen være afbrudt; ingen inkonsistent tilstand). Dog WATCH spiller ikke godt med en multiplekser , hvilket er grunden til, at SE.Redis tvinger dig ned på ruten for at hente værdien før transaktionen , så du kan sammenligne værdien for at hævde, at den er uændret. Samme resultat; lidt anderledes tilgang, men den er multiplekser-sikker. For mere om det emne se her.




  1. Hvordan gør jeg mere end/mindre end at bruge MongoDB?

  2. Sådan rettes Redis-nøgler serialiseret med Java

  3. Find objekter mellem to datoer MongoDB

  4. Laravel + predis + Redis klynge - FLYTTET / ingen forbindelse til 127.0.0.1:6379