Redis e a escapar dos dados binários
estou a ter dificuldade em compreender como usar os tipos de dados binários com o redis. Quero usar o comando
set '{binary data}' 'Alex'
e se os dados binários incluírem de facto um símbolo de citação ou /r / n? Sei que consigo escapar a personagens, mas há uma lista oficial de personagens que preciso de escapar?
5 answers
O seu problema está relacionado com o redis-cli (que é um bom cliente redis para conhecer o Redis, mas quase nunca o que você quer na produção, por causa do uso e problemas de desempenho).
O seu problema também se relaciona com a fuga do terminal comum (bash/sh/outro). Aqui está uma boa explicação.
Sugiro que use python para isto, ou qualquer outro linguagem com que se sente confortável.
Exemplo:
import redis
cli=redis.Redis('localhost', 6379)
with open('data.txt','rb') as f:
for d in f:
t = d.partition('\t')
cli.set(t[0], t[2].rstrip())
#EOF
Você pode enviar o comando como um conjunto de cadeias de caracteres para o Redis, sem necessidade de escapar dos caracteres ou codificar o Base64. Uma vez que os strings de massa começam com o comprimento dos dados, o Redis não tenta processar os bytes de dados e, em vez disso, salta para o fim para verificar o par CR/LF de terminação:
*3<crlf>
$3<crlf>SET<crlf>
${binary_key_length}<crlf>{binary_key_data}<crlf>
${binary_data_length}<crlf>{binary_data}<crlf>
Bytes arbitrários podem ser introduzidos em redis-cli
usando uma notação hexadecimal, por exemplo
set "\x00\xAB\x20" "some value"
Descobri que é melhor usar o protocolo Redis para fazer isto, pois os limites podem ser definidos antes do tipo de dados.
FastoNoSQL e FastoRedis conseguem lidar com chaves binárias sem escapar.