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

Làm cách nào để chuyển đổi một byte thành toàn bộ chuỗi hex?

Khi lặp qua một bytes giá trị, bạn nhận được số nguyên; chúng được chuyển đổi nhỏ thành ký hiệu hex:

def convert(value: bytes):
    return ''.join([f'\\x{b:02x}' for b in value])

Lưu ý rằng điều này tạo ra một chuỗi có dấu gạch chéo ngược theo nghĩa đen, x ký tự và ký tự chữ số thập lục phân . Nó không còn là bytes giá trị.

Demo:

>>> print(convert(b'\x01\x02\x41'))
\x01\x02\x41

Chỉ để đảm bảo rằng bạn không cần phải lo lắng về bytes giá trị . repr() đại diện của một bytes đối tượng sẽ luôn sử dụng các ký tự ASCII khi giá trị byte xảy ra là của mã điểm ASCII có thể in được. Điều đó không có nghĩa là giá trị bị thay đổi. b'\x01\x02\x41' bằng b'\x01\x02A' . Giao thức Redis không biết gì về \x<HH> trình tự thoát, vì vậy đừng cố gửi chuỗi trên qua dây.

Các chuỗi thoát mà bạn tạo là chuỗi chuỗi bash shell và cũng giống như chuỗi Python, bạn không cần phải sử dụng thoát . Như trong Python, để Bash các chuỗi "\x01\x02A""\x01\x02\x41" có giá trị bằng nhau. Chúng chỉ có ý nghĩa khi bạn chuyển các chuỗi khóa và giá trị trên dòng lệnh, không phải trong tệp văn bản mà bạn chuyển đến redis-cli .

Hơn nữa, xin lưu ý rằng redis-cli --pipe lệnh nhận đầu vào giao thức Redis thô , không phải cú pháp lệnh Redis, hãy xem Redis Mass Insertion tài liệu. Giao thức này không sử dụng \xhh trình tự, vì nó không sử dụng ký hiệu shell.

Thay vào đó, hãy sử dụng hàm sau để tạo SET thô lệnh:

def raw_protocol(cmd: str, *args: bytes):
    return b'\r\n'.join([
        f'*{len(args) + 1}\r\n${len(cmd)}\r\n{cmd}'.encode(),
        *(bv for a in args for bv in (b'$%d' % len(a), a)),
        b''
    ])

Đối với một SET lệnh, sử dụng raw_protocol('SET', keybytes, valuebytes) và ghi dữ liệu nhị phân mà dữ liệu này tạo ra vào một tệp được mở ở chế độ nhị phân.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis thiết lập TTL trên hSet Keys

  2. Tập lệnh Lua cho Redis tính tổng các giá trị của các khóa

  3. Rails và caching, có dễ dàng chuyển đổi giữa memcache và redis không?

  4. Node Js:Công việc của Redis không hoàn thành sau khi hoàn thành nhiệm vụ của nó

  5. Cố gắng giải quyết các phần phụ thuộc:Thay đổi Thư viện Chuẩn .NET thành NET Core - Microsoft.Extensions.