Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Ai đó có thể giải thích lệnh redis setbit?

Như tên của nó, SETBIT cho phép bạn thực hiện các thao tác với bit - cụ thể là đặt một bit nhất định thành 0 hoặc 1, tại một độ lệch bit nhất định, cho một khóa nhất định.

Điều quan trọng cần hiểu là kết quả không phải lúc nào cũng chỉ bao gồm các ký tự có thể in được. Đây là lý do tại sao Redis sử dụng hàm tùy chỉnh sdscatrepr để định dạng đầu ra CLI:

Nối vào chuỗi sds "s" một biểu diễn chuỗi thoát trong đó tất cả các ký tự không in được (được kiểm tra với isprint ()) được chuyển thành các ký tự thoát ở dạng "\ n \ r \ a ...." hoặc "\ x" .

Điều đó đang được nói, hãy bắt đầu với một ví dụ đơn giản. Nếu bạn coi số hex 0x7F (=127) biểu diễn nhị phân của nó trên 8 bit là:

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

Bạn thường có thể sử dụng SETBIT để lưu trữ giá trị này, hãy nhớ rằng bù đắp 0MSB và độ lệch 7 là 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

Nhận giá trị của bạn để kiểm tra nếu:

redis> GET myval
"\x7f"

Bây giờ điều gì xảy ra với nhiều byte? Giả sử bạn muốn lưu trữ 0x52 (=82) tương ứng với ký tự R trong ASCII. Biểu diễn 8 bit là 01010010 với các vị trí bit (8, 9, ..., 15) vì chúng tôi muốn nó được lưu trữ ngay sau giá trị đầu tiên:

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

Và bạn nhận được:

redis> GET myval
"\x7fR"

Ở đây Redis CLI có thể đại diện cho ký tự in được R .

Khi tôi lưu trữ giá trị chuỗi 1 và 7 vào "mykey"

Nó tương ứng với 01000001 bằng 65 và 0x41 trong hex. Nó tương ứng với ký tự ASCII A . Vì vậy, đang làm:

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

Cung cấp:

redis> GET mykey
"A"

getbit hoạt động như thế nào bên trong redis?

Nó chỉ trả về giá trị của bit tại vị trí đã cho. Đây:

redis> GETBIT mykey 1
(integer) 1

Nhưng bit 0 chưa được đặt (nó là 0 theo mặc định) do đó:

redis> GETBIT mykey 0
(integer) 0


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao sử dụng Redis thay vì MongoDb cho bộ nhớ đệm?

  2. Redis có sử dụng tên người dùng để xác thực không?

  3. PubSub hoạt động như thế nào trong BookSleeve / Redis?

  4. node.js lưu trữ các đối tượng trong redis

  5. Cách lưu trữ một JSON lồng nhau phức tạp trong Redis bằng Python