Redis Watch Command

Redis Watch Command
Hvis du ser alvorlig på Redis, vil du bruke transaksjoner for å administrere dataene dine. Redis -transaksjoner er ikke veldig forskjellige fra transaksjoner i en relasjonsdatabase.

En databasetransaksjon refererer til en enkelt arbeidsenhet bestående av enkelt til flere spørsmål. I tilfeller kan en operasjon bare klassifiseres som en transaksjon hvis det er endringer i databasen.

Vi vil ikke bekymre oss for det, men vi vil lære å bruke Watch -kommandoen sammen med Redis -transaksjoner for denne.

Hva er transaksjoner?

I Redis består transaksjoner av fire hovedkommandoer: klokke, exec, kasser og multi.

Ved hjelp av kommandoene ovenfor kan du åpne en blokk og legge til flere kommandoer på en gang. Når du er fullført, kjører du kommandoene som en enkelt enhet.

For at en transaksjon skal lykkes, sikrer Redis at:

  1. Alle kommandoene som er spesifisert i en transaksjonsenhet, utføres fortløpende. Derfor først til mølla.
  2. Alle kommandoene i en transaksjonsenhet må utføre vellykket. Hvis en av kommandoene i enheten mislykkes, mislykkes også hele transaksjonsblokken. Denne funksjonen er kjent som atomkommandoutførelse
  3. For det tredje blir kommandoer i en transaksjon serialisert. Derfor kan en klient ikke være en server mens en transaksjonsenhet kjører.

Redis opprette transaksjon

Du oppretter en transaksjonsenhet ved hjelp av multi -kommandoen. Multi -kommandoen vil returnere OK. Du kan gå foran og legge til alle transaksjonskommandoene etter den andre.

I stedet for å utføre kommandoene, vil Redis stå i kø dem i innsetting til du ringer dem.

Et eksempel er som vist nedenfor:

127.0.0.1: 6379> multi
Ok

Redis utfør transaksjonsenhet

Som nevnt vil Redis stille kommandoene i en transaksjonsenhet til du utfører dem manuelt.

Vi kan gjøre dette ved hjelp av Exec -kommandoen. Dette forteller Redis å kjøre alle de kø -kommandoene i innsatsbestillingen.

Et eksempelbruk er som vist nedenfor:

127.0.0.1: 6379> Sett NewKey "100"
I kø
127.0.0.1: 6379> incr newKey
I kø
127.0.0.1: 6379> Få NewKey
I kø
127.0.0.1: 6379>

Du vil merke at hver kommando som er utført er i kø. En kommando i kø er en kommando som er planlagt å kjøre etter at exec kalles.

For å kjøre det, ring exec som:

127.0.0.1: 6379> exec
1) Ok
2) (Heltall) 101
3) "101"

Dette skal utføre alle kommandoene og returnere de resulterende verdiene.

Redis Fjern kommandokøen

Anta at du vil rengjøre kommandokøen og skylle alle planlagte kommandoer? For det kan du bruke Discard -kommandoen som vist:

127.0.0.1: 6379> multi
Ok
127.0.0.1: 6379> Sett NewKey "100"
I kø
127.0.0.1: 6379> incr newKey
I kø
127.0.0.1: 6379> Få NewKey
I kø
127.0.0.1: 6379> Kasser
Ok

Etter å ha kjørt kassekommandoen, vil Redis returnere OK og lukke transaksjonsenheten.

Redis Watch Command

Watch-kommandoen i Redis lar deg implementere sjekk-og-sett-funksjonen. Klokkekommandoene godtar redis -nøkler som parametere og overvåker dem.

Hvis noen av de spesifiserte nøklene endres før EXEC -kommandoen blir kalt, avslutter Redis automatisk transaksjonen og returnerer et null -svar.

Ta eksemplet nedenfor:

var = få mykey
var = var + 1
Sett mykey $ var

I eksemplet over har vi en operasjon som øker verdien av en nøkkel med 1. Dette er selvfølgelig ikke noe problem hvis bare en enkelt klient utfører nevnte operasjon.

Imidlertid, hvis flere klienter prøver å utføre ovennevnte operasjon samtidig, oppstår en løpstilstand og returnerer en ugyldig verdi.

Vi kan løse dette ved å se nøkkelen som vist:

Se Mykey
var = få mykey
var = var + 1
Multi
Sett mykey $ var
Exec

Her, hvis en klient fungerer og verdien av nøkkelen endres før han utfører transaksjonen, mislykkes utførelsen.

For å fjerne alle så nøkler, bruk kommandoen Unwatch.

Konklusjon

Denne artikkelen diskutert ved hjelp av og arbeider med transaksjoner i en Redis -database. Sjekk dokumentasjonen for å oppdage mer.

Takk for at du leste!!