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

Kan nogen forklare redis setbit kommando?

Som navnet antyder, SETBIT giver dig mulighed for at udføre bitoperationer - nemlig indstille en given bit til 0 eller 1, ved en given bitforskydning, for en given nøgle.

Det, der er vigtigt at forstå, er, at resultatet ikke altid kun indeholder tegn, der kan udskrives. Det er derfor Redis bruger en brugerdefineret funktion sdscatrepr for at formatere CLI-outputtet:

Føj til sds-strengen "s" en escaped strengrepræsentation, hvor alle de ikke-udskrivbare tegn (testet med isprint()) omdannes til escapes i formen "\n\r\a..." eller "\x" .

Når det er sagt, lad os starte med et simpelt eksempel. Hvis du overvejer hex-nummeret 0x7F (=127) dens binære repræsentation på 8-bit er:

pos: 0 1 2 3 4 5 6 7 bit: 0 1 1 1 1 1 1 1 ^ ^ | | MSB LSB

Du kan typisk bruge SETBIT for at gemme denne værdi, og husk at offset 0 er MSB og offset 7 er LSB :

redis> SETBIT myval 0 0
(integer) 0
redis> SETBIT myval 1 1
(integer) 0
redis> SETBIT myval 2 1
(integer) 0
redis> SETBIT myval 3 1
(integer) 0
redis> SETBIT myval 4 1
(integer) 0
redis> SETBIT myval 5 1
(integer) 0
redis> SETBIT myval 6 1
(integer) 0
redis> SETBIT myval 7 1
(integer) 0
 

Få din værdi til at inspicere, hvis:

redis> GET myval
"\x7f"
 

Hvad sker der nu med multibytes? Lad os sige, at du vil gemme 0x52 (=82), hvilket svarer til tegnet R i ASCII. 8-bit repræsentationen er 01010010 med bitpositioner (8, 9, ..., 15) da vi vil have den gemt lige efter den første værdi:

redis> SETBIT myval 8 0
(integer) 0
redis> SETBIT myval 9 1
(integer) 0
redis> SETBIT myval 10 0
(integer) 0
redis> SETBIT myval 11 1
(integer) 0
redis> SETBIT myval 12 0
(integer) 0
redis> SETBIT myval 13 0
(integer) 0
redis> SETBIT myval 14 1
(integer) 0
redis> SETBIT myval 15 0
(integer) 0
 

Og du får:

redis> GET myval
"\x7fR"
 

Her er Redis CLI i stand til at repræsentere det printbare tegn R .

Når jeg gemmer strengværdi 1 og 7 i "mykey"

Det svarer til 01000001 som er lig med 65 og 0x41 i hex. Det svarer til ASCII-tegn A . Så gør:

redis> SETBIT mykey 1 1
(integer) 0
redis> SETBIT mykey 7 1
(integer) 0
 

Giver:

redis> GET mykey
"A"
 

hvordan fungerer getbit inde i redis?

Det returnerer blot værdien af ​​bit ved den givne position. Her:

redis> GETBIT mykey 1
(integer) 1
 

Men bit 0 er ikke blevet sat (det er 0 som standard) således:

redis> GETBIT mykey 0
(integer) 0
 


  1. Jeg prøver at køre mongod server på ubuntu :undtagelse i initAndListen:29 Databibliotek /data/db ikke fundet., afsluttes

  2. Hvordan udfører jeg mongodump-kommandoen programmatisk fra node.js?

  3. Har Meteor en særskilt forespørgsel til samlinger?

  4. Brug af lagrede JavaScript-funktioner i Aggregation-pipelinen, MapReduce eller runCommand