2010-08-24 326 views
55

我正在学习如何将Redis用于我的项目。有一件事我没有得到我的头是密钥的名称是用于密钥。Redis密钥中冒号的作用是什么

我见过的键名,如这些:

users:bob 
color:blue 
item:bag 

是否结肠单独的密钥进行分类,并找到钥匙更快?如果是这样,你可以使用多个冒号命名键将它们分解成子类别?最后,他们与在Redis服务器中定义不同的数据库有什么关系?

我已经通读文档,并做了大量的谷歌搜索这件事,但奇怪的是我找不到任何讨论这件事。

回答

74

冒号在早期的redis版本中作为存储命名空间数据的概念。在早期版本的Redis只支持字符串,如果你想存储电子邮件和“鲍勃”的年龄,你必须给它的所有存储为一个字符串,所以冒号使用:

SET user:bob:email [email protected] 
SET user:bob:age 31 

他们有没有特殊处理或性能特征,唯一的目的是命名空间数据再次找到它。现在你可以使用散列存储大部分coloned键:

HSET user:bob email [email protected] 
HSET user:bob age 31 

你不必命名哈希“用户:鲍勃”,我们可以将其命名为“鲍勃”,但随着用户的前缀命名空间它我们立即知道这个散列应该/可能有哪些信息。

+1

非常感谢,正是我需要知道的:) – Ryan 2010-08-24 11:43:24

+2

我很想知道为什么当''''在这种事情中更常见于各种语言时。 – CivFan 2015-09-08 23:29:51

+2

也许与大多数语言中用于对象访问的点运算符完全不同 – 2015-09-09 11:10:03

30

冒号是结构键的一种方式。它们不以任何方式被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' 

您可以看到,键结构使SORT能够通过引用结构化键来查找用户的颜色。

+1

使用/是一个很好的建议! – 2015-05-01 08:38:20