Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 二进制安全字符串和二进制不安全字符串之间有什么区别?_String_Redis - Fatal编程技术网

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

String 二进制安全字符串和二进制不安全字符串之间有什么区别?,string,redis,String,Redis,我正在阅读redis宣言[1],redis似乎只接受二进制安全字符串作为键,但我不知道两者之间的区别。有人能举例说明吗 [1] 我不熟悉所讨论的系统,但术语“二进制安全字符串”可能用于描述某些字符串存储类型,也可能用于描述特定的字符串实例。在二进制安全字符串类型中,长度为N的字符串可用于封装0-255或0-65535(分别适用于8位或16位类型)范围内N值的任何序列。二进制安全字符串实例可能是这样的实例,其表示形式可以细分为大小一致的片段,每个片段表示一个字符,这与字符串实例不同,在该实例中,不

我正在阅读redis宣言[1],redis似乎只接受二进制安全字符串作为键,但我不知道两者之间的区别。有人能举例说明吗


[1]

我不熟悉所讨论的系统,但术语“二进制安全字符串”可能用于描述某些字符串存储类型,也可能用于描述特定的字符串实例。在二进制安全字符串类型中,长度为N的字符串可用于封装0-255或0-65535(分别适用于8位或16位类型)范围内N值的任何序列。二进制安全字符串实例可能是这样的实例,其表示形式可以细分为大小一致的片段,每个片段表示一个字符,这与字符串实例不同,在该实例中,不同的字符需要不同的存储空间

某些字符串类型(不是二进制安全的)将对某些字符使用可变长度表示法,如果要求对其进行操作,则会出现异常行为,例如,一个字符串包含“多部分字符的前半部分”的代码,后跟“多部分字符的后半部分”以外的代码。此外,一些使用字符串的代码将假定第n个字符将存储在第n个字节或第n对字节中,并且如果给定一个字符串,例如第8个字符存储在第12和第13对字节中,则会发生故障

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

根据,简单的Redis字符串具有语法
“+Redis\u response\r\n”
,而批量Redis字符串具有语法
“$str\u len\r\n二次安全的字符串\r\n”
。 换句话说,Redis中的二进制安全字符串可以包含任何简单到
“foo”
的数据,也可以包含任何高达
512MB的二进制数据,比如JEPG图像。二进制安全字符串的长度已在其中编码,并且不会以任何特定字符终止,例如以
'\0
结尾的
C
中的
NULL
终止字符串

嗯,,
swand

二进制安全表示字符串可以包含任何字符,而二进制不安全则不能,例如C语言中的“\0”\“0”是字符串的结尾,这意味着“\0”之后和“\0”之前的字符将被视为两个不同的字符串