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

Bagaimana saya bisa mengonversi satu byte ke seluruh string hex?

Saat mengulangi bytes nilai, Anda mendapatkan bilangan bulat; ini sepele dikonversi ke notasi heksadesimal:

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

Perhatikan bahwa ini menghasilkan string dengan garis miring terbalik literal, x karakter dan karakter digit heksadesimal . Ini bukan lagi bytes nilai.

Demo:

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

Untuk memastikan, Anda tidak perlu khawatir tentang bytes nilai . repr() representasi dari bytes objek akan selalu menggunakan karakter ASCII ketika nilai byte adalah nilai dari titik kode ASCII yang dapat dicetak. Bukan berarti nilainya berubah. b'\x01\x02\x41' sama dengan b'\x01\x02A' . Protokol Redis tidak tahu apa-apa tentang \x<HH> escape sequence, jadi jangan coba mengirim string di atas melalui kabel.

Urutan escape yang Anda hasilkan adalah urutan string shell bash , dan seperti string Python, Anda tidak perlu menggunakan escapes . Seperti di Python, untuk Bash string "\x01\x02A" dan "\x01\x02\x41" memiliki nilai yang setara. Mereka hanya masuk akal ketika Anda meneruskan string kunci dan nilai pada baris perintah, bukan dalam file teks yang Anda pipa ke redis-cli .

Selain itu, harap dicatat bahwa redis-cli --pipe perintah mengambil masukan protokol Redis mentah , bukan sintaks perintah Redis, lihat Penyisipan Massal Redis dokumentasi. Protokol ini tidak gunakan \xhh urutan, karena tidak menggunakan notasi shell.

Sebagai gantinya, gunakan fungsi berikut untuk menghasilkan SET mentah perintah:

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''
    ])

Untuk SET perintah, gunakan raw_protocol('SET', keybytes, valuebytes) dan tuliskan data biner yang dihasilkannya ke file yang dibuka dalam mode biner.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. kesalahan koneksi redis dalam wadah buruh pelabuhan

  2. Bagaimana cara menggunakan penyisipan massal Redis?

  3. Pizza Tribes - Game Strategi Real-Time Berbasis Browser Multiplayer

  4. ruby resque tanpa memuat lingkungan rel

  5. Bagaimana saya bisa menjalankan redis pada satu server di port yang berbeda?