【问题标题】:Why does Redis use integer database numbers?为什么 Redis 使用整数数据库编号?
【发布时间】:2011-07-07 23:26:52
【问题描述】:

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

【问题讨论】:

  • 最好在redis dev list上问。
  • 如果我不能在这里得到答案,那将是我的下一步……但我尽量避免邮寄名单:P
  • 投票结束的人:您能发表评论解释原因吗?我不认为这个问题“可能会征求意见、辩论、争论、投票或扩展讨论”,而且我知道 Redis 并没有那么受欢迎,但我也不要认为有关它的问题属于“非常狭窄”。
  • 在这里找到知道的人的机会非常小。相反,当你询问动机时,你会得到猜测。猜测“没有建设性”。您可能不喜欢邮件列表,但对于此类问题,它们是了解事实的人的家。
  • 由于“不具建设性”,我投票决定关闭。我看不出任何答案会如何增加本网站的知识体系。除非 antirez 自己回答(答案很可能是“没有理由,它只是更简单”)所有答案都将是纯粹的猜测。

标签: redis


【解决方案1】:

Redis 之所以不使用字符串作为数据库名称而是使用索引,是因为 Redis 数据库的目标和能力不是提供一个外层的字典:Redis 字典不能扩展到很多字典,而只能扩展到很小的字典。数字(这是一个折衷),我们也不想为每个设计提供嵌套数据结构,所以这只是“几个命名空间”,因此使用数字小索引似乎是最好的选择。

【讨论】:

  • 与将数据库名称作为命名空间字符串前缀相比,这是一种更好的方法吗?
【解决方案2】:

拥有命名数据库并不真正符合 redis 的设计目标。首先,在为最大性能而设计的系统中,当大多数用户无论如何都将所有内容都放在 DB 0 中时,为每个调用添加字符串查找并不是一个好主意。

另一个设计目标是保持核心简单 - 如果请求的新命令可以通过组合客户端上的现有命令来实现,而不会造成巨大的性能损失,则它不会被添加到核心系统中。如果你真的需要命名数据库,更新你的客户端代码读取一个字符串并向redis发送一个数字是微不足道的。

【讨论】:

  • “为每个调用添加一个字符串查找”——如果我错了,请纠正我,但它只需要对每个 SELECT 调用进行查找(即,将符号名称映射到整数),不是吗?
  • 是的,但根据您使用数据库和连接的方式,这可能接近等效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 2013-03-02
相关资源
最近更新 更多