Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Adakah yang bisa menjelaskan perintah redis setbit?

Sesuai dengan namanya, SETBIT memungkinkan Anda untuk melakukan operasi bit - yaitu menyetel bit tertentu ke 0 atau 1, pada offset bit tertentu, untuk kunci tertentu.

Yang penting untuk dipahami adalah bahwa hasilnya tidak selalu hanya mencakup karakter yang dapat dicetak. Inilah sebabnya mengapa Redis menggunakan fungsi khusus sdscatrepr untuk memformat keluaran CLI:

Tambahkan ke string sds "s" representasi string yang lolos di mana semua karakter yang tidak dapat dicetak (diuji dengan isprint()) diubah menjadi escape dalam bentuk "\n\r\a...." atau "\x" .

Yang sedang berkata mari kita mulai dengan contoh sederhana. Jika Anda mempertimbangkan angka heksadesimal 0x7F (=127) representasi binernya pada 8-bit adalah:

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

Anda biasanya dapat menggunakan SETBIT untuk menyimpan nilai ini, dengan mengingat bahwa offset 0 adalah MSB dan offset 7 adalah 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

Dapatkan nilai Anda untuk diperiksa jika:

redis> GET myval
"\x7f"

Sekarang apa yang terjadi dengan multi byte? Katakanlah Anda ingin menyimpan 0x52 (=82) yang sesuai dengan karakter R di ASCII. Representasi 8-bit adalah 01010010 dengan posisi bit (8, 9, ..., 15) karena kami ingin menyimpannya tepat setelah nilai pertama:

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

Dan Anda mendapatkan:

redis> GET myval
"\x7fR"

Di sini Redis CLI mampu merepresentasikan karakter yang dapat dicetak R .

Ketika saya menyimpan nilai string 1 dan 7 ke "mykey"

Ini sesuai dengan 01000001 yang sama dengan 65 dan 0x41 dalam heksa. Ini sesuai dengan karakter ASCII A . Begitu pula:

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

Memberikan:

redis> GET mykey
"A"

bagaimana getbit bekerja di dalam redis?

Ini hanya mengembalikan nilai bit pada posisi yang diberikan. Di sini:

redis> GETBIT mykey 1
(integer) 1

Tetapi bit 0 belum disetel (secara default adalah 0) dengan demikian:

redis> GETBIT mykey 0
(integer) 0


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. flushdb tidak menghapus semua kunci di redis?

  2. kesalahan koneksi redis dalam wadah buruh pelabuhan

  3. Berapa ukuran nilai maksimum yang dapat Anda simpan di redis?

  4. Redis Pub/Sub ServiceStack, membatalkan utas

  5. Bagaimana cara memulai Redis di Heroku?