仰望高峰Redis默认大小写之问(redis 默认大小写)
仰望高峰:Redis默认大小写之问题,是一个棘手的问题。在实际开发中,我们很容易犯这样的错误:在不知不觉中使用大小写混合的建,造成可能的困扰,例如程序不能正常执行,或者覆盖了原有的建的数据。
为了避免在Redis开发过程中出现这类问题,Redis采用了一种默认的大小写规则:键全部设置为小写,不区分大小写。这样可以避免错误输入,在查询数据时更加准确,也减少了不必要的错误。例如,如果我们同时存储两条不同的键”mykey“和”Mykey“,只会存储一条,只保存最后一条存储的键(假如无特殊限定,最后存储的为“Mykey”)。
为了实现上述效果,Redis使用了一个叫做Dictionary结构的数据结构,里面的每个键都需要进行大小写转换,其中比较核心的代码如下:
static unsigned int dictCaseHashFunction(const unsigned char *buf, int len) {
unsigned int hash = (unsigned int)dict_hash_function_seed; while (len--)
hash = ((hash return hash;
}
从上面的代码可以看出,Redis在添加键时,会将(key)全部转换为小写,这样一来不同大小写的同样字符串就可以被识别为相同的键。
通过以上我们可以得出结论:Redis是一个非常便捷实用的关系型数据库,开发者在使用它的时候,需要特别注意对外输入的字符串,保持大小写正确的风格;而在内部操作的时候,Redis会自动帮我们将所有的输入都转换为小写字符串,避免出现相同键的覆盖。