我读Redis的宣言[1],它似乎Redis的只接受二进制安全的字符串作为密钥,但我不知道这两者之间的区别。谁能解释一个例子?二进制安全字符串和二进制不安全字符串有什么区别?
[1] http://oldblog.antirez.com/post/redis-manifesto.html
我读Redis的宣言[1],它似乎Redis的只接受二进制安全的字符串作为密钥,但我不知道这两者之间的区别。谁能解释一个例子?二进制安全字符串和二进制不安全字符串有什么区别?
[1] http://oldblog.antirez.com/post/redis-manifesto.html
我不熟悉的系统问题,但“二进制安全的字符串”可能要么用来形容某些字符串存储类型或描述特定字符串实例。在一个二进制安全字符串类型,长度为N的字符串可被用于封装在N的值的任何序列0-255或0-65535(对于8位或16位的类型,分别地)。一个二进制安全的字符串实例可能是一个可以将其表示细分为大小一致的块的实例,每个块代表一个字符,与不同字符需要不同数量存储空间的字符串实例不同。
一些字符串类型(不是二进制安全的)将使用可变长度表达对某些字符,将行为古怪,如果要求在例如采取行动一个字符串,其中包含“多部分字符的前半部分”的代码,后跟除“多部分字符的后半部分”之外的字符。此外,一些与字符串一起工作的代码将假定它的第N个字符将被存储在第N字节或第N对字节中,并且如果给定一个字符串第8个字符存储在第12和第13对字节中。
我只想简单地看一下提供的链接,我猜想这就是说redis
不希望只适用于使用不同字节数来存放不同字符的字符串,尽管我不太清楚它是否假设一个字符串类型将能够处理任何可能的字节序列,或者它是否假设它给出的任何字符串实例可以被安全地视为一个字节序列。然而,我认为感兴趣的基本概念是:(1)一些字符串类型使用可变长度编码,而其他字符串则不使用; (2)即使在使用可变长度编码的类型中,字符串实例的有用子集也只包含固定长度字符。
根据Redis documentation,简单的Redis字符串的语法为"+redis_response\r\n"
,而批量Redis字符串的语法为"$str_len\r\nbinary_safe_string\r\n"
。 换句话说,在Redis的二进制安全字符串可以包含简单的"foo"
以高达512MB
任何二进制数据的数据说JEPG图像。二进制安全的串有其长度在它编码并不与任何特定的字符终止如在C
一个NULL
终止字符串与'\0
结束。
HTH, Swanand