Redis
 sql >> база данни >  >> NoSQL >> Redis

Може ли някой да обясни командата redis setbit?

Както подсказва името му, SETBIT ви позволява да извършвате битови операции – а именно да зададете даден бит на 0 или 1, при дадено битово изместване, за даден ключ.

Важно е да се разбере, че резултатът не винаги включва само печатни знаци. Ето защо Redis използва персонализирана функция sdscatrepr за да форматирате изхода на CLI:

Добавете към sds низа "s" представяне на екранизиран низ, където всички непечатаеми знаци (тествани с isprint()) се превръщат в escape под формата "\n\r\a..." или "\x" .

Като се има предвид това, нека започнем с прост пример. Ако вземете предвид шестнадесетичния номер 0x7F (=127) неговото двоично представяне на 8-битов е:

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

Обикновено можете да използвате SETBIT за да съхраните тази стойност, като имате предвид, че отместването 0 е MSB и отместване 7 е 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

Вземете стойността си, за да проверите, ако:

redis> GET myval
"\x7f"

Сега какво се случва с много байтове? Да приемем, че искате да съхраните 0x52 (=82), което съответства на знак R в ASCII. 8-битовото представяне е 01010010 с битови позиции (8, 9, ..., 15) тъй като искаме да се съхранява веднага след първата стойност:

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

И получавате:

redis> GET myval
"\x7fR"

Тук Redis CLI може да представи символа за печат R .

Когато съхранявам стойности на низове 1 и 7 в "mykey"

Отговаря на 01000001 което е равно на 65 и 0x41 в шестнадесетичен. Той съответства на ASCII символ A . Така се прави:

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

Дава:

redis> GET mykey
"A"

как getbit работи в redis?

Той просто връща стойността на бита в дадената позиция. Тук:

redis> GETBIT mykey 1
(integer) 1

Но бит 0 не е зададен (по подразбиране е 0) по този начин:

redis> GETBIT mykey 0
(integer) 0


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Работникът на опашката на Redis се срива в utcparse

  2. Сравняване на 64-битово число със знак с помощта на 32-битови операции в Lua

  3. Цикъл за в redis с асинхронни заявки на nodejs

  4. как да конфигурирате различен ttl за всеки кеш на redis, когато използвате @cacheable в springboot2.0

  5. Функцията Google Cloud изтече при свързване към Redis на вътрешен IP адрес на Compute Engine