Redis密钥中冒号的目的是什么?

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

我已经看到这些关键的名字:

users:bob color:blue item:bag 

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

我已经通过文档阅读,并做了大量的谷歌search这个问题,但奇怪的是我找不到任何讨论这个问题。

冒号已经在早期的redis版本中作为存储命名空间数据的概念。 在早期的版本中,redis只支持string,如果你想存储电子邮件和'bob'的年龄,你必须把它存储为一个string,所以使用冒号:

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

它们在redis中没有特殊的处理或性能特征,唯一的目的是将数据命名为再次find它。 现在,您可以使用散列来存储大部分的共享密钥:

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

你不必命名散列“user:bob”,我们可以将它命名为“bob”,但是用户名前缀命名我们可以立即知道这个散列应该/可能具有哪些信息。

冒号是构build密钥的一种方式。 它们不以任何方式被redis解释。 您也可以使用任何您喜欢的分隔符或根本没有分隔符。 我个人更喜欢/ ,这使得我的密钥看起来像文件系统path。 它们对性能没有任何影响,但是由于redis必须将所有的密钥保存在内存中,所以不应该让它们过长。

一个好的关键结构对于利用sort命令的强大function非常重要,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能够通过引用结构化键来查找用户的颜色。