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

Redis C# - Brug af Incr-værdi i en transaktion

Der er en grundlæggende egenskab ved redis MULTI/EXEC-enheder, som betyder, at du ikke kan få resultater under operationen. Som sådan er der to almindelige måder at gøre det, du beder om:

  1. Brug Lua (ScriptEvaluate[Async] ); et Lua-script udføres på serveren fra start til slut, er effektivt og undgår alle problemer forbundet med rundturstid (latens eller båndbredde) eller konkurrence fra andre forbindelser
  2. Brug en optimistisk loop, der aflæser den aktuelle værdi, og opretter derefter en transaktion i SE-Redis, der tilføjer en begrænsning at den værdi, du lige har læst, er den samme, og udfører bivirkningerne i transaktionen; biblioteket vil koordinere det nødvendige WATCH etc maskineri for at gøre dette robust, men hvis begrænsningsbetingelsen viser sig at være ugyldig (dvs. biblioteket returnerer false ), skal du lave alt om fra starten

Helt ærligt, i disse dage ville jeg altid guide folk til mulighed 1; mulighed 2 er kun "tiltalende" (og jeg bruger det udtryk helt forkert), hvis Lua-scripting på serversiden ikke er tilgængelig.

Jeg er ikke ved en pc, men jeg gætter på, at scriptet ville se nogenlunde sådan ud:

local id = redis.call("incr", KEYS[1])
redis.call("hset", KEYS[2], tostring(id), ARGV[1])
return id



  1. Sådan genbruges forbindelsen til Mongodb korrekt på tværs af NodeJs applikation og moduler

  2. MongoDB Kan ikke starte - ***afbrydelse efter fassert()-fejl

  3. Mongodb Healthcheck Trin for Trin

  4. Hvornår skal du deaktivere Transparent Huge Pages for redis