我正在学习如何将Redis用于我的项目。我没有理解的一件事是在键的名称中使用了多少冒号。
我看过这些关键字的名称:
users:bob
color:blue
item:bag
冒号是否将键分成几类并更快地找到键?如果是这样,在命名键时可以使用多个冒号将它们分解为子类别吗?最后他们是否与在Redis服务器中定义不同的数据库有关?
我已阅读文档,并就此事进行了大量Google搜索,但奇怪的是我找不到任何讨论此事的内容。
答案 0 :(得分:81)
冒号在早期的redis版本中作为存储命名空间数据的概念。在早期版本中,redis仅支持字符串,如果你想存储电子邮件和'bob'的年龄,你必须将它全部存储为字符串,所以使用了冒号:
SET user:bob:email bob@example.com
SET user:bob:age 31
他们在redis中具有 no 特殊处理或性能特征,唯一的目的是命名数据以再次找到它。现在,您可以使用哈希来存储大多数已克隆的键:
HSET user:bob email bob@example.com
HSET user:bob age 31
您不必将哈希命名为“user:bob”,我们可以将其命名为“bob”,但是使用用户前缀命名它,我们会立即知道此哈希应该/可能具有哪些信息。
答案 1 :(得分:37)
冒号是构建键的一种方式。它们不以任何方式由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能够通过引用结构化键来查找用户的颜色。