sql >> Database teknologi >  >> NoSQL >> Redis

Hvordan kunne jeg konvertere en bytes til en hel hex-streng?

Ved iteration over en bytes værdi, får du heltal; disse er trivielt konverteret til hex-notation:

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

Bemærk, at dette producerer en streng med bogstavelige omvendte skråstreg, x tegn og heksadecimale cifre . Det er ikke længere en bytes værdi.

Demo:

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

Bare for at være sikker behøver du ikke at bekymre dig om bytes værdi . repr() repræsentation af en bytes objekt vil altid bruge ASCII-tegn, når byteværdien tilfældigvis er den for et udskrivbart ASCII-kodepunkt. Det betyder ikke, at værdien ændres. b'\x01\x02\x41' er lig med b'\x01\x02A' . Redis-protokollen ved ikke noget om \x<HH> escape-sekvenser, så prøv ikke at sende ovenstående streng over ledningen.

De escape-sekvenser, du producerer, er bash shell-strengsekvenser , og ligesom Python-strenge, behøver du ikke at bruge escapes . Som i Python, for at bash strengene "\x01\x02A" og "\x01\x02\x41" har lige værdier. De giver kun mening, når du sender nøgle- og værdistrengene på kommandolinjen, ikke i en tekstfil, du sender til redis-cli .

Bemærk desuden, at redis-cli --pipe kommandoen tager rå Redis protokol input , ikke Redis kommandosyntaks, se Redis Mass Insertion dokumentation. Denne protokol gør ikke brug \xhh sekvenser, da den ikke bruger shell-notation.

Brug i stedet følgende funktion til at generere rå SET kommandoer:

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

For et SET kommando, brug raw_protocol('SET', keybytes, valuebytes) og skriv de binære data, dette producerer, til en fil, der åbnes i binær tilstand.




  1. Laravel + predis + Redis klynge - FLYTTET / ingen forbindelse til 127.0.0.1:6379

  2. MongoDB - admin bruger ikke autoriseret

  3. MongoDB - Sorter resultaterne af en forespørgsel

  4. Mongo $i operatørydelse