为什么Redis使用整数数据库编号?

49

为什么Redis使用整数数据库编号而不是字符串?似乎保留一个小的内部数据结构,将字符串映射到“实际”整数是微不足道的。


最好在Redis开发者列表上询问。 - bmargulies
1
如果我在这里得不到答案,那就是我的下一步了...但是我尽可能地避免使用邮件列表:P - David Wolever
4
投票关闭的人:请您留下评论解释一下为什么要这样做?我认为这个问题不太可能引发意见、辩论、争吵、投票或延长讨论,而且我知道 Redis 并不是那么受欢迎,但我也认为关于它的问题并不算“非常狭窄”。请您给出具体原因。 - David Wolever
在这里找到一个真正“知道”的人的机会非常小。相反,当你寻求动力时,你得到的只是猜测。猜测是“没有建设性的”。你可能不喜欢邮件列表,但对于这样的问题,它们是拥有事实的人的家园。 - bmargulies
我投票关闭了这个问题,因为它是“没有建设性的”。我不认为任何答案都能够增加这个网站的知识体系。除非antirez本人回答(而且答案很可能是“没有原因,只是更简单”),否则所有答案都将是纯粹的猜测。 - Theo
好的 —— 这些确实是很好的理由。感谢回复。 - David Wolever
2个回答

49
Redis不使用字符串作为数据库名称而是索引的原因是,Redis数据库的目标和能力并非提供一个外部级别的字典:Redis字典不能扩展到许多字典,只能是一小部分(这是一个权衡),我们也不想在设计中提供嵌套数据结构,所以这只是“少量命名空间”,因此使用数值小的索引似乎是最佳选择。

7
相较于将数据库名称作为命名空间字符串前缀处理,这种方法有何优势? - shazow

8
命名数据库并不符合Redis的设计目标。首先,在一个旨在实现最大性能的系统中,对每个调用添加字符串查找并不是一个好主意,因为大多数用户都将所有内容放在DB 0中。
另一个设计目标是保持核心简单 - 如果一个请求的新命令可以通过在客户端组合现有命令而没有巨大的性能惩罚来实现,它就不会被添加到核心系统中。如果你真的需要命名数据库,那么更新你的客户端代码以读取一个字符串并向Redis发送一个数字非常容易。

2
“为每个调用添加字符串查找”- 请纠正我如果我错了,但是它只需要为每个SELECT调用执行一次查找(即将符号名称映射到整数),对吗? - David Wolever
1
真的,尽管这取决于您如何使用数据库和连接,可能会接近等效。 - Tom Clarkson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接