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

lokaqttq  于 2023-01-20  发布在  Redis
关注(0)|答案(2)|浏览(314)

我正在学习如何在我的一个项目中使用Redis,有一件事我还不太清楚,那就是冒号在键的名字中到底是用来做什么的。
我见过这样的关键名称:

users:bob
color:blue
item:bag

冒号是否可以将密钥分成不同的类别,并使查找密钥的速度更快?如果可以,您可以在命名密钥时使用多个冒号来将它们分成子类别吗?最后,它们是否与Redis服务器中定义不同的数据库有关?
我已经通读了文档,并做了大量的谷歌搜索,但奇怪的是,我找不到任何讨论这一点。

xyhw6mcr

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命名它,我们立刻就知道这个哈希应该/可能包含哪些信息。

3df52oht

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能够通过引用结构化键来查找用户的颜色。

相关问题