Redis 键中冒号的用途是什么

问题描述 投票:0回答:2

我正在学习如何在我的一个项目中使用 Redis。我不明白的一件事是键名称中冒号的具体用途。

我见过这样的键名:

users:bob
color:blue
item:bag

冒号是否将键分成类别并使查找键更快?如果是这样,您可以在命名键时使用多个冒号将它们分解为子类别吗?最后,它们与在 Redis 服务器中定义不同的数据库有什么关系?

我已经阅读了文档并就此事进行了大量谷歌搜索,但奇怪的是我找不到任何讨论此问题的内容。

redis syntax key-value-store
2个回答
117
投票

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

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

它们在 Redis 中没有特殊的处理或性能特征。唯一的目的是为数据命名空间以便再次找到它。如今,您可以使用哈希来存储大部分冒号键:

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

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


51
投票

冒号是构建键的一种方式。 Redis 不会以任何方式解释它们。您还可以使用您喜欢的任何其他分隔符或根本不使用。我个人更喜欢

/
,这使我的密钥看起来像文件系统路径。它们对性能没有影响,但你不应该让它们太长,因为 Redis 必须将所有键保留在内存中。

良好的键结构对于利用排序命令的强大功能非常重要,这是 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 能够通过引用结构化键来查找用户的颜色。

© www.soinside.com 2019 - 2024. All rights reserved.