所以,我来到这里,我想我段中的Redis到不同的数据库中存储,因为我有时需要使用密钥对一个特定类型的数据的命令的数据,并希望分开它做更快的地方。
如果我段放入多个数据库,一切仍是单线程的,我仍然只得到使用一个核心。 如果我只是发动对同一个盒子的Redis的另一个实例,我可以使用额外的核心。 最重要的是,我不能说出的Redis数据库,或给他们任何形式的多个逻辑标识符。 因此,所有这一切说,为什么/时,我会永远想使用多个Redis的数据库,而不是仅仅旋转起来Redis的额外的实例为每个额外的数据库我想要什么? 而与此相关的,为什么不尝试的Redis利用每个额外的数据库我添加一个额外的核心是什么? 什么是跨数据库被单线程的优势在哪里?
原则上,在同一实例的Redis数据库并不比在RDBMS数据库实例的模式不同。
因此,所有这一切说,为什么/时,我会永远想使用多个Redis的数据库,而不是仅仅旋转起来Redis的额外的实例为每个额外的数据库我想要什么?
有一个在同一个redis的情况下使用Redis的数据库的一个明显的优势,那就是管理。 如果你旋转了一个单独的实例为每个应用程序,并让我们说你有3个应用程序,这是3种独立Redis的情况下,其中的每一个可能需要在生产HA的奴隶,所以这是6个总实例。 从管理的角度来看,因为你需要监控所有的人这就会变得混乱真正的快,做升级/补丁等,如果你不超载的高我Redis的计划/ O,与从单个实例比较简单,更易于管理,提供符合您的SLA。
你不想在一个单一的Redis实例使用多个数据库。 它已经过时,正如你提到的,多个实例让你利用多核的优势。 如果您使用的数据库选择你将不得不升级时进行重构。 监控和管理多个实例并不困难,也不痛苦。
事实上,你会得到通过隔离每个DB基于实例更好的指标。 每个实例将有反映数据的部分,它可以允许更好的调整和反应更灵敏,准确的监测统计。 使用最新版本,并通过实例分开你的数据。
作为Jonaton说,不使用按键命令。 你会发现更好的性能,如果你简单地创建一个关键指标。 每当添加一个关键,关键的名称添加到组。 一旦扩展,因为它会采取显著时间返回键命令是不是非常有用。
让访问模式确定如何组织你的数据,而不是存储它认为你的作品,然后周围工作如何访问和后剁碎的方式。 你会看到更好的性能和发现数据消费代码通常是更清洁和更简单。
对于单线程的,认为Redis的是专为速度和原子。 当然动作修改在一个DB数据上的另一个数据库不需要等待,但如果该操作将被保存到转储文件,或奴隶交易处理? 在这一点上,你开始进入并发编程的杂草。
通过使用多个实例打开多线程复杂到简单的信息传递方式系统。
即使萨尔瓦托雷圣菲利波(Redis的创作者)认为这是一个坏主意在Redis的使用多个数据块。 在这里看到他的评论:
https://groups.google.com/d/topic/redis-db/vS5wX8X4Cjg/discussion
我明白这可能是有用的,但不幸的是,我认为Redis的多个数据库错误,我在所有... Redis的设计,最糟糕的决定没有任何一种真正的收获的,它使内部复杂得多。 现实情况是,数据库不为一些原因很好地扩展,钥匙和VM像活跃到期。 如果DB选择可以使用字符串来执行我可以看到被用作一个可伸缩的O(1)词典层此功能,相反,它是没有的。
随着DB号,有几个DB的默认设置,我们是更好地沟通一下这个功能,以及如何可以用我的想法。 我希望,在某些时候,我们可以在所有的拖放多个数据块的支持,但我认为这是可能为时已晚,因为是很多人依靠这个功能对他们的工作。
Redis的数据库可以在部署应用程序,其中的新版本需要与不同实体工作的新版本的少数情况下使用。
我使用Redis的用于实现电子邮件地址的黑名单,我有不同程度的黑名单的不同的TTL值,因此在相同的情况下具有不同的DB帮助了我很多。
在一个实例中使用多个数据库可能在以下情况下有用:
同一个数据库的不同副本可用于生产,开发或使用实时数据测试。 人们可以使用复制克隆的Redis实例来达到同样的目的。 然而,前一种方法是对现有正在运行的程序,只是选择合适的数据库切换到预期的模式更容易。