Redis密钥中冒号的用途是什么

Redis密钥中冒号的用途是什么,redis,key-value-store,colon,Redis,Key Value Store,Colon,我正在学习如何在我的一个项目中使用Redis。有一件事我还没有弄清楚,那就是冒号在钥匙的名字中到底是用来做什么的 我已经看到了密钥的名称,例如: users:bob color:blue item:bag 冒号是否将键分为多个类别并使查找键更快?如果是这样的话,在命名关键点时可以使用多个冒号将其分解为子类别吗?最后,它们是否与在Redis服务器中定义不同的数据库有关 我已经阅读了文档,并在谷歌上搜索了很多关于这个问题的内容,但奇怪的是,我找不到任何讨论这个问题的内容。冒号作为存储名称空间数据的

我正在学习如何在我的一个项目中使用Redis。有一件事我还没有弄清楚,那就是冒号在钥匙的名字中到底是用来做什么的

我已经看到了密钥的名称,例如:

users:bob
color:blue
item:bag
冒号是否将键分为多个类别并使查找键更快?如果是这样的话,在命名关键点时可以使用多个冒号将其分解为子类别吗?最后,它们是否与在Redis服务器中定义不同的数据库有关


我已经阅读了文档,并在谷歌上搜索了很多关于这个问题的内容,但奇怪的是,我找不到任何讨论这个问题的内容。

冒号作为存储名称空间数据的概念出现在早期的redis版本中。在早期版本中,redis只支持字符串,如果要存储电子邮件和“bob”年龄,则必须将其全部存储为字符串,因此使用冒号:

SET user:bob:email bob@example.com
SET user:bob:age 31
他们在redis中没有特殊的处理或性能特征,唯一的目的是重新命名数据的空间以再次找到它。现在,您可以使用哈希存储大多数冒号键:

 HSET user:bob email bob@example.com
 HSET user:bob age 31

您不必将散列命名为“user:bob”,我们可以将其命名为“bob”,但使用用户前缀对其命名,我们可以立即知道此散列应该/可能包含哪些信息。

冒号是构造键的一种方法。redis不会以任何方式解释它们。您也可以使用任何其他您喜欢的分隔符,或者根本不使用。我个人更喜欢
/
,这使我的密钥看起来像文件系统路径。它们对性能没有影响,但您不应该将它们设置得过长,因为redis必须将所有键保留在内存中

一个好的密钥结构对于利用sort命令的功能非常重要,这是redis对SQL连接的回答

GET user:bob:color   -> 'blue'
GET user:alice:color -> 'red'

SMEMBERS user:peter:friends -> alice, bob

SORT user:peter:friends BY NOSORT GET user:*:color   -> 'blue', 'red'

可以看到,键结构允许排序通过引用结构化键来查找用户的颜色

使用/是一个很好的建议!在尝试使用Redis时,我意识到,当使用冒号而不是斜杠来构造键时,像RedisCommander()这样的UI工具显示出更好的可视化效果。因此,我对冒号的历史意义投了赞成票。我想知道为什么选择了
,而
在各种语言中似乎更常见于这种事情。可能与大多数语言中用于对象访问的点运算符完全不同