Redis和转义二进制数据

时间:2014-08-29 17:41:13

标签: binary redis

我很难理解如何在redis中使用二进制数据类型。我想使用命令

   set '{binary data}' 'Alex'

如果二进制数据实际包含引号或/ r / n怎么办?我知道我可以逃脱角色,但是有一个我需要逃脱的正式人物名单吗?

5 个答案:

答案 0 :(得分:3)

没有必要对数据本身做任何特别的事情。所有Redis字符串都是二进制安全的。

你的问题与redis-cli有关(这是一个非常好的redis客户端,用于了解Redis,但由于使用性能问题,几乎从不生产你想要的东西)。

您的问题还涉及常见(bash / sh / other)终端转义。 Here是一个很好的解释。

我建议您使用python或其他任何您熟悉的语言。

示例:

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

答案 1 :(得分:1)

您可以将命令作为批量字符串数组发送到Redis,无需转义字符或Base64编码。由于批量字符串以数据长度开头,因此Redis不会尝试解析数据字节,而是跳转到末尾以验证终止CR / LF对:

*3<crlf>
$3<crlf>SET<crlf>
${binary_key_length}<crlf>{binary_key_data}<crlf>
${binary_data_length}<crlf>{binary_data}<crlf>

答案 2 :(得分:1)

可以使用十六进制表示法在redis-cli中输入任意字节,例如

set "\x00\xAB\x20" "some value"

答案 3 :(得分:0)

我发现最好使用Redis协议来执行此操作,因为可以在数据类型之前定义边界。

答案 4 :(得分:0)

FastoNoSQLFastoRedis可以处理二进制密钥而无需转义。

binary keys in redis