redis中键的常规命名约定是什么?我已经看到了值被分开,:
但我不确定正常约定是什么,或者为什么.
对于用户,你会做一些像......
user:00
如果用户的ID是 00
您是否只能查询密钥的开头以返回所有用户?
我主要是希望通过研究为人们工作的方式以及为什么选择这些问题来避免任何未来的问题.
redis中键的常规命名约定是什么?我已经看到值被分隔:但我不确定正常约定是什么,或者为什么.
是的,冒号:
是命名键时的约定.在redis网站上的本教程中说明:尽量坚持使用模式.例如,"object-type:id:field"可能是个不错的主意,比如"user:1000:password".我喜欢将点用于多字词字段,例如"comment:1234:reply.to".
您是否只能查询密钥的开头以返回所有用户?
如果你的意思是像直接查询所有以键开头user:
的键,那就有一个键命令.但是,此命令仅用于调试目的,因为它是O(N),因为它正在搜索数据库中的所有键.
针对此问题的更合适的解决方案是创建专用密钥,我们的名称是users
,它将存储所有用户密钥,例如,在列表或设置数据结构中.
我们使用冒号(:)作为命名空间分隔符,使用哈希(#)作为键的id部分,例如:
logistics:building#23
一个约定似乎是冒号(:) 但我是一个Web开发人员所以我个人更喜欢使用斜杠(/)作为分隔符.斜杠已经是URL中非常重要的分隔符,它们是统一资源定位器,因此是资源的密钥.为什么采用冒号(:)的不同方法?它有帮助吗?
考虑这个例子:
我们有一个用于玩具对象的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); ... }
无需将斜杠转换为冒号,反之亦然.方便,你不觉得吗?
注意:始终确保用户只能访问您想要的内容.user/1/password
正如评论员所指出的,上面的原始URL-to-key方法也可以获取.如果您将Redis用作公共只读缓存,这应该不是问题.
我不知道Redis关键命名是否真的存在广泛的"最佳实践".
我已经尝试使用ASCII NUL字符作为我的分隔符(因为Redis和Python都是8位干净的).如果您正在查看原始密钥,它看起来有点难看,但其想法是将其隐藏在抽象层之后.冒号和管道符号是明显的替代方案,只要您的名称空间的组件要么保证不使用它们,要么您愿意根据需要对每个组件进行编码.但是,如果您要对它们进行编码,那么您需要开发抽象层并避免查看原始密钥......这让我回到了在我的推理中使用\ 0.
我会很有兴趣看看是否有任何其他意见.