当前位置:  开发笔记 > 编程语言 > 正文

Redis的关键命名约定?

如何解决《Redis的关键命名约定?》经验,为你挑选了4个好方法。

redis中键的常规命名约定是什么?我已经看到了值被分开,:但我不确定正常约定是什么,或者为什么.

对于用户,你会做一些像......

user:00

如果用户的ID是 00

您是否只能查询密钥的开头以返回所有用户?

我主要是希望通过研究为人们工作的方式以及为什么选择这些问题来避免任何未来的问题.



1> yojimbo87..:

redis中键的常规命名约定是什么?我已经看到值被分隔:但我不确定正常约定是什么,或者为什么.

是的,冒号:是命名键时的约定.在redis网站上的本教程中说明:尽量坚持使用模式.例如,"object-type:id:field"可能是个不错的主意,比如"user:1000:password".我喜欢将点用于多字词字段,例如"comment:1234:reply.to".

您是否只能查询密钥的开头以返回所有用户?

如果你的意思是像直接查询所有以键开头user:的键,那就有一个键命令.但是,此命令仅用于调试目的,因为它是O(N),因为它正在搜索数据库中的所有键.

针对此问题的更合适的解决方案是创建专用密钥,我们的名称是users,它将存储所有用户密钥,例如,在列表或设置数据结构中.


@ yojimbo87所以会有两个命令让我们先说是创建密钥 - 用户:808021:密码= XYZ,第二个是将密钥放入注册表或索引(设置),但是当一个命令成功执行时会发生什么其他获取失败意味着密钥已创建但未在注册表中获取条目.
我还注意到Redis桌面管理器(一个Redis客户端工具)也将冒号':'视为分隔符,并显示组合在一起的多个键

2> The Nail..:

我们使用冒号(:)作为命名空间分隔符,使用哈希(#)作为键的id部分,例如:

logistics:building#23



3> Akseli Palén..:

一个约定似乎是冒号(:) 我是一个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用作公共只读缓存,这应该不是问题.


请不要将用户输入作为密钥输入数据库.
......方便,几乎*令人厌恶*不安全.你乞求得到`curl http://example.com/api/user/1/password`'d或类似的东西.(只是在说'.)
冒号,散列和斜杠可用于指定不同级别的嵌套,例如`User#23:uploads:my/path/to/file.ext`

4> Jim Dennis..:

我不知道Redis关键命名是否真的存在广泛的"最佳实践".

我已经尝试使用ASCII NUL字符作为我的分隔符(因为Redis和Python都是8位干净的).如果您正在查看原始密钥,它看起来有点难看,但其想法是将其隐藏在抽象层之后.冒号和管道符号是明显的替代方案,只要您的名称空间的组件要么保证不使用它们,要么您愿意根据需要对每个组件进行编码.但是,如果您要对它们进行编码,那么您需要开发抽象层并避免查看原始密钥......这让我回到了在我的推理中使用\ 0.

我会很有兴趣看看是否有任何其他意见.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有