我正在学习如何在我的一个项目中使用 Redis。我不明白的一件事是键名称中冒号的具体用途。
我见过这样的键名:
users:bob
color:blue
item:bag
冒号是否将键分成类别并使查找键更快?如果是这样,您可以在命名键时使用多个冒号将它们分解为子类别吗?最后,它们与在 Redis 服务器中定义不同的数据库有什么关系?
我已经阅读了文档并就此事进行了大量谷歌搜索,但奇怪的是我找不到任何讨论此问题的内容。
冒号作为存储命名空间数据的概念出现在早期的 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”,但是使用用户前缀命名它,我们立即知道该哈希应该/可以包含哪些信息。
冒号是构建键的一种方式。 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 能够通过引用结构化键来查找用户的颜色。