Redis Setnx

Redis Setnx

Redis String Datatype

Redis er en datalager i minnet som støtter mer komplekse datastrukturer sammenlignet med andre datalagre for nøkkelverdier. Blant alle disse komplekse datastrukturene som sett, hasj, bitmaps og lister, støtter den også de mest ukompliserte strengtypene. I så fall kartlegger en strengtast til en strengverdi. Vanligvis brukes settet og få kommandoer til å opprette og hente nøkkelverdidata fra Redis Store. Videre oppretter den angitte kommandoen en ny nøkkel i minnet og kartlegger en strengverdi til den, ikke noe mer enn det. Det vil overskrive verdien hvis nøkkelen allerede eksisterer.

Ingen sikkerhetsmekanisme implementeres med den angitte kommandoen som standard for å håndtere verdimutasjonene av flere klienter samtidig uten gjensidig avtale. Denne kommandoen må kalles med sikkerhetsmålinger på plass, for eksempel en låsemekanisme.

Sette en nøkkelverdi betinget

Det er alltid bedre å følge et sikkerhetstiltak når du muterer en verdi som er lagret på en gitt nøkkel. Derfor har Redis introdusert et alternativ til den angitte kommandoen Nx som er på plass og ikke vil mutere verdien av en allerede eksisterende nøkkel. Den samme oppførselen er implementert med en ny kommando som blir forklart i neste avsnitt.

SETNX -kommandoen

SetNX -kommandoen, som navnet antyder, “sett hvis ikke eksisterer, ” Noe som betyr at kommandoen bare vil sette en verdi hvis og bare hvis den spesifiserte tasten ikke eksisterer i datalageret. Hver gang den spesifiserte tasten allerede eksisterer, vil ikke kommandoen utføre noen operasjon på den tasten. Med den begrensningen er SETNX -kommandoen tryggere enn den angitte kommandoen. Videre har denne kommandoen konstant tidskompleksitet.

Syntaks:

SETNX REDIS_KEY VERDI

redis_key: Den unike identifikatoren for en Redis nøkkelverdi-paroppføring.

verdi: Verdien forbundet med redis -tasten.

Denne kommandoen vil returnere et heltalls svar der 1 betyr tasten er satt med en ny verdi. Hvis den returnerte verdien er 0, er nøkkelen ikke satt, og den eksisterende nøkkelen vil inneholde den gamle verdien.

Eksempel 01 - låsemekanisme med setNX

La oss anta et online spill der flere spillere får tilgang til en vanlig gullbøtte som eies av laget sitt. Spillerne kan få tilgang til gullbøtten og fylle den opp med gullet som de har funnet ved å utforske verden. Se for deg at spiller en får tilgang til gullbøtten og slipper litt gull i løpet av en fast periode. Samtidig prøver spiller to å konsumere litt gull fra samme bøtte. I så fall skal tilgangen ikke overleveres til spiller to før spiller en slipper gullbøtten. Dette kan implementeres med SETNX -kommandoen med en enkel låsemekanisme.

De Spiller: 1 kan bruke SETNX -kommandoen for å angi den totale gullbeløpet i bøtta. La oss anta at vi skal lagre gullbeløpet i nøkkelen Goldbucket.

SetNX Goldbucket 100

Som forventet, Goldbucket Nøkkel er opprettet med en verdi på 100. Nå, Spiller: 1 har låsen. La oss si Spiller: 2 kommer til å ringe SETNX -kommandoen for å angi det nye gullbeløpet.

SetNX Goldbucket 200

Denne gangen returnerer kommandoen 0 fordi nøkkelen Goldbucket eksisterer. Med andre ord, nøkkelen er låst av Spiller: 1 allerede. Derfor må spiller: 2 vente til spilleren: 1 slipper låsen ved å slette eller automatisk timeout -utløp.

La oss sjekke verdien som er tilknyttet Goldbucket Nøkkel, som vist i det følgende.

Få Goldbucket

Som forventet er verdien fortsatt 100, noe som betyr Spiller: 1 har allerede låst dataverdien. Derfor, Spiller: 2 trenger å fortsette å vente til tidsavbruddet går ut og Spiller: 1 frigjør det.

Det kan være en dødvaktssituasjon hvis klienten krasjer eller mislykkes på grunn av en nettverkssvikt og låsen ikke er utgitt av den krasjet klienten. Flere klienter kan legge merke til dette og prøve å fjerne låsen ved hjelp av DEL -kommandoen. Som et resultat vil hver klient slette sine egne nøkler gjentatte ganger, noe som vil føre til en dødvakt.

Det kan løses av hver klient som sjekker for tidsstempel på forhånd ved hjelp av GetSet -kommandoen og deretter anskaffe låsen ved hjelp av SETNX -kommandoen hvis og bare hvis tidsstempelet er utløpt.

Konklusjon

For å oppsummere, er Redis en nøkkelverdibutikk som støtter de enkleste strengdatatypene blant de andre komplekse datastrukturene som hasj, sett, bitmaps og lister. Som dere alle vet, sett og få er de mest grunnleggende kommandoene som kan brukes til å lage og hente Redis nøkkelverdipar. Set-metoden brukes til å lage nøkkelverdipar i Redis-databasen som til slutt overskriver den tilhørende verdien for en spesifisert tast hvis nøkkelen allerede eksisterer i databasen. Som tidligere fremhevet i artikkelen, kan denne utrygge verdimutasjonen begrenses med Redis SetNX -kommandoen. SetNX -kommandoen angir verdien for en gitt tast hvis nøkkelen ikke allerede eksisterer. Hver gang en nøkkel eksisterer, utfører ikke kommandoen noe og returnerer 0. Derfor brukes SETNX-kommandoen til å implementere låsemekanismer i sanntidsapplikasjoner.