二进制安全字符串和二进制不安全字符串有什么区别?

aam*_*mir 10 string redis

我正在阅读redis宣言[1],似乎redis只接受二进制安全字符串作为键,但我不知道两者之间的区别.有谁可以用一个例子解释一下?

[1] http://oldblog.antirez.com/post/redis-manifesto.html

小智 8

根据Redis文档,简单的Redis字符串具有语法,"+redis_response\r\n"而批量Redis字符串具有语法"$str_len\r\nbinary_safe_string\r\n".换句话说,Redis中的二进制安全字符串可以包含任何数据,就像"foo"任何二进制数据一样简单512MB说明JEPG图像.二进制安全的串有其长度在它编码并不与任何特定的字符终止如NULL在终止字符串C与结束'\0.

HTH,Swanand


sup*_*cat 6

我不熟悉有问题的系统,但术语"二进制安全字符串"可能用于描述某些字符串存储类型或描述特定的字符串实例.在二进制安全字符串类型中,长度为N的字符串可用于封装0-255或0-65535范围内的任何N值序列(分别用于8位或16位类型).二进制安全字符串实例可以是其表示可以细分为大小均匀的片段,每个片段代表一个字符,与不同字符需要不同存储空间量的字符串实例不同.

一些字符串类型(不是二进制安全的)将对某些字符使用可变长度表示,并且如果被要求对例如包含"多部分字符的前半部分"的代码的字符串进行操作则会表现得很奇怪除了"多部分角色的下半部分".此外,一些使用字符串的代码将假定第N个字符将存储在第N个字节或第N个字节对中,并且如果给定一个字符串,例如第8个字符存储在第12个字符串中,则会发生故障.第13对字节.

仅仅简单地看一下提供的链接,我猜它redis会说不希望只使用使用不同字节数来保存不同字符的字符串,尽管我不清楚它是否假设字符串类型将能够处理任何可能的字节序列,或者它是否假设它给出的任何字符串实例可以被安全地视为字节序列.我认为感兴趣的基本概念是(1)一些字符串类型使用可变长度编码而其他字符串类型不使用; (2)即使在使用可变长度编码的类型中,字符串实例的有用子集也只包含固定长度的字符.