Redis的关键命名约定?
redis中密钥的正常命名约定是什么? 我已经看到由:
分隔的值:
但我不确定常规是什么,或者为什么。
对于用户,你会做类似…
user:00
如果用户的ID是00
你是否能够查询关键的开始返回所有用户?
我主要是希望通过研究为人们工作的方式,以及为什么select他们,希望避免任何未来的问题。
redis中密钥的正常命名约定是什么? 我已经看到由以下分隔的值:但我不确定常规是什么,或者为什么。
是的,冒号:
是命名密钥时的惯例。 在redis网站上的这个教程中,声明了: 尝试坚持一个模式。 例如“object-type:id:field”可以是一个好主意,就像在“user:1000:password”中一样。 我喜欢在多词的字段中使用点,如“comment:1234:reply.to”。
你是否能够查询关键的开始返回所有用户?
如果你的意思是直接查询所有以user:
开头的密钥,那么就有一个keys命令。 这个命令应该只用于debugging目的,因为它是O(N),因为它正在search数据库中的所有键。
对于这个问题更合适的解决scheme是创build专用密钥,让我们的名字是users
,它将存储所有的用户密钥,例如,在列表或设置数据结构。
我们使用冒号(:)作为名称空间分隔符和密钥的id部分的散列(#),例如:
logistics:building#23
一个约定似乎冒号(:) 但我是一个Web开发人员,所以我个人偏好斜杠(/)的分隔符。 在URLs中,斜线已经是非常重要的分隔符,它们被认为是统一资源定位器(Uniform Resource Locators) ,是资源的关键。 为什么要用冒号(:)来采取不同的方法? 它有帮助吗?
考虑这个例子:
我们有一个玩具对象的RESTful API。 有一个:
http://example.com/api/toy/234
我们存储在哪里? 我们使用Redis和斜杠,所以关键是显而易见的:
toy/234
这是玩具的唯一钥匙。 钥匙现在也可以在客户端使用:
{ key: "toy/234", color: "red", url: function () { return API_BASE_URL + this.key; } }
用户用钥匙toy/666
请求物体。 如何从Redis获取? 一个Node.js相关的例子:
redis.get(key, function reply_callback(error, toystring) { var toy = JSON.parse(toystring); ... }
不需要将斜杠转换为冒号,反之亦然。 方便,你不觉得吗?
我不知道是否真的有Redis关键命名的“最佳实践”。
我已经尝试使用ASCII NUL字符作为我的分隔符(因为Redis和Python都是8位的)。 它看起来有点难看,如果你看原始键,但想法是隐藏在抽象层后面。 冒号和pipe道符号是显而易见的select,只要你的名字空间的组件保证不使用它们,或者你愿意按需要编码每个组件。 然而,如果你要编码它们,那么你会想要开发抽象层,并避免查看原始密钥……这使我回到在我的推理中使用\ 0。
看到有没有其他的意见,我会很有趣。