sql >> Databáze >  >> NoSQL >> Redis

Jak bych mohl převést bajty na celý hex řetězec?

Při iteraci přes bytes hodnota, dostanete celá čísla; tyto jsou triviálně převedeny na hexadecimální zápis:

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

Všimněte si, že to vytvoří řetězec s doslovnými zpětnými lomítky, x znaky a znaky hexadecimálních číslic . Již to nejsou bytes hodnotu.

Demo:

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

Pro jistotu si nemusíte dělat starosti s bytes hodnotu . repr() reprezentace bytes objekt bude vždy používat znaky ASCII, když se stane, že hodnota bajtu je tisknutelná kódovým bodem ASCII. To neznamená, že se hodnota změnila. b'\x01\x02\x41' se rovná b'\x01\x02A' . Protokol Redis neví nic o \x<HH> escape sekvence, takže se nepokoušejte odeslat výše uvedený řetězec po drátě.

Escape sekvence, které vytvoříte, jsou sekvence řetězců bash shell a stejně jako pythonovské řetězce nemusíte používat escape . Stejně jako v Pythonu, k Bashování řetězců "\x01\x02A" a "\x01\x02\x41" mít stejné hodnoty. Mají smysl pouze tehdy, když předáváte řetězce klíčů a hodnot na příkazovém řádku, nikoli v textovém souboru, který převádíte pomocí kanálu do redis-cli .

Navíc mějte na paměti, že redis-cli --pipe příkaz přebírá nezpracovaný vstup protokolu Redis , nikoli syntaxe příkazu Redis, viz Hromadné vkládání Redis dokumentace. Tento protokol není použijte \xhh sekvencí, protože nepoužívá shellovou notaci.

Místo toho použijte následující funkci ke generování nezpracovaného SET příkazy:

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

Pro SET příkaz, použijte raw_protocol('SET', keybytes, valuebytes) a zapsat takto vytvořená binární data do souboru otevřeného v binárním režimu.




  1. spring-data-redis redisTemplate Výjimka

  2. Deadlock pomocí Aggregator + Redis

  3. MongoDB $dateToParts

  4. Přístup k dockerizovanému redis z hostitele systému Windows