Redis密钥的命名约定和有效字符


76

我想知道Redis密钥中哪些字符有效。我已经搜索了一段时间,找不到任何有用的信息。

像在Python中一样,有效的变量名称应属于class [a-zA-Z0-9_]。Redis密钥的要求和约定是什么?

Answers:


110

在这里可以部分回答,但这并不是完全重复,因为您在询问允许的字符和约定。

至于Redis密钥中的有效字符本手册对此进行了完整的解释

Redis密钥是二进制安全的,这意味着您可以使用任何二进制序列作为密钥,从“ foo”之类的字符串到JPEG文件的内容。空字符串也是有效的键。

有关密钥的其他一些规则:

过长的密钥不是一个好主意,例如,1024字节的密钥不仅是内存方面的主意,而且还因为在数据集中查找密钥可能需要进行一些代价高昂的密钥比较。即使当手头的任务是匹配一个大值的存在时,还是要对它进行散列(例如使用SHA1)是一个更好的主意,尤其是从内存和带宽的角度来看。

非常短的键通常不是一个好主意。如果您可以改写“ user:1000:followers”,那么将“ u1000flw”作为密钥写的毫无意义。与键对象本身和值对象使用的空间相比,后者更具可读性,并且添加的空间较小。虽然短键显然会消耗更少的内存,但是您的工作是找到合适的平衡。

尝试坚持一个模式。例如,“ object-type:id”是一个好主意,例如“ user:1000”。点或破折号通常用于多字字段,例如“ comment:1234:reply.to”或“ comment:1234:reply-to”中。

允许的最大密钥大小为512 MB。


1
那么,我们可以在键名中留出空格吗?
Vipul Jain

3
@Vipul:是的,“这意味着您可以使用任何二进制序列作为键,”尽管在命令行上您必须在该键周围加上引号,否则SET some key my value将无法工作,而SET "some key" "my value"可以。
j boschiero

1
密钥名称中的':'是否在Redis中创建索引?
Pankhuri Agarwal

2
@PankhuriAgarwal不,冒号只是一个方便的分隔符。例如,某些GUI用冒号在树状结构中对键进行分组。在Redis中没有传统意义上的索引。
andreycha

Redis键中冒号和下划线之间是否存在某些区别?例如“ user:1000:followers”和“ user_10000_followers”
Kingname
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.