我正在学习如何在我的一个项目中使用Redis,有一件事我还不太清楚,那就是冒号在键的名字中到底是用来做什么的。我见过这样的关键名称:
users:bob color:blue item:bag
冒号是否可以将密钥分成不同的类别,并使查找密钥的速度更快?如果可以,您可以在命名密钥时使用多个冒号来将它们分成子类别吗?最后,它们是否与Redis服务器中定义不同的数据库有关?我已经通读了文档,并做了大量的谷歌搜索,但奇怪的是,我找不到任何讨论这一点。
xyhw6mcr1#
冒号在早期版本的redis中是一个存储命名空间数据的概念,早期版本的redis只支持字符串,如果你想存储电子邮件和“bob”的年龄,你必须把它们都存储为字符串,所以使用冒号:
SET user:bob:email bob@example.com SET user:bob:age 31
它们在redis中没有特殊的处理或性能特性,唯一的目的是给数据命名空间以便再次找到它。现在你可以使用hash来存储大多数的带冒号的键:
HSET user:bob email bob@example.com HSET user:bob age 31
你不需要把哈希命名为“user:bob”,我们可以把它命名为“bob”,但是用user-prefix命名它,我们立刻就知道这个哈希应该/可能包含哪些信息。
3df52oht2#
冒号是构造键的一种方式。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能够通过引用结构化键来查找用户的颜色。
2条答案
按热度按时间xyhw6mcr1#
冒号在早期版本的redis中是一个存储命名空间数据的概念,早期版本的redis只支持字符串,如果你想存储电子邮件和“bob”的年龄,你必须把它们都存储为字符串,所以使用冒号:
它们在redis中没有特殊的处理或性能特性,唯一的目的是给数据命名空间以便再次找到它。现在你可以使用hash来存储大多数的带冒号的键:
你不需要把哈希命名为“user:bob”,我们可以把它命名为“bob”,但是用user-prefix命名它,我们立刻就知道这个哈希应该/可能包含哪些信息。
3df52oht2#
冒号是构造键的一种方式。redis不会以任何方式解释它们。你也可以使用你喜欢的任何其他分隔符,或者根本不使用。我个人更喜欢
/
,它使我的键看起来像文件系统路径。它们对性能没有影响,但你不应该让它们过长,因为redis必须将所有键保存在内存中。一个好的键结构对于利用sort命令的功能非常重要,这是redis对SQL连接的回答。
您可以看到,键结构使SORT能够通过引用结构化键来查找用户的颜色。