【问题标题】:Redis databases on a dev machine with multiple projects具有多个项目的开发机器上的 Redis 数据库
【发布时间】:2011-02-28 22:35:30
【问题描述】:

当其中一些项目使用 Redis 数据库时,您如何管理开发和/或测试机器上的多个项目?

有两个主要问题:

  1. Redis 没有命名数据库(只有数字 0-16)
  2. 测试可能会在每次运行时执行 FLUSHDB

目前,我认为我们有三个选择:

  1. 为每个项目、每个开发和测试环境分配不同的数据库
  2. 项目名称前缀键使用类似redis-namespace
  3. 您可以随时在项目之间切换时对数据库进行核对和播种

如果多个项目将“0”分配给主要用途,将“1”分配给测试等,则第一个是有问题的。即使项目 B 决定更改为“2”和“3”,项目中的另一个成员也可能在另一个项目中为他而发生冲突。换句话说,这种方法对 SCM 不友好。

对于第二个,这是一个坏主意,因为它增加了运行时性能和内存效率的不必要开销。而且无论你做什么,当你加入该项目时,另一个项目可能已经巧合地使用了相同的密钥。

第三种选择是妥协的产物,但有时我希望在为其他项目部署小补丁时保持本地数据不受影响。

我知道这可能是对 Redis 的功能请求,但我现在需要一个解决方案。

有什么想法、做法吗?

【问题讨论】:

    标签: redis


    【解决方案1】:

    如果项目是独立的,因此不需要共享数据,最好使用多个 redis 实例 - 每个项目配置都有一个端口号而不是数据库名称/id。为每个实例创建一个适当命名的配置文件和启动脚本,以便您只需单击即可获得需要运行的任何实例。

    确保更新每个配置文件中的保存设置以及设置端口 - 使用同一个 dump.rdb 文件的多个实例可以工作,但会导致一些相当混乱的错误。

    我还使用单独的实例进行开发和测试,以便测试实例永远不会向磁盘写入任何内容,并且可以在每次测试开始时刷新。

    【讨论】:

      【解决方案2】:

      Redis 正在远离多个数据库,因此我建议您尽早开始迁移该机制的 put。这意味着每个数据库一个实例。鉴于运行 Redis 的开销非常低,从资源的角度来看,这不是问题。

      也就是说,您可以指定数据库的数量,并提供一个命名标准。例如,将 redis 配置为 60 DBS,然后为测试数据库添加 10。例如 db3 使用 db13 进行测试。

      听起来您的开发、测试和生产环境非常紧密地联系在一起。如果是这样,我建议远离它。使用单独的实例是最简单的方法,并提供防止交叉用途污染的保护。在这与未来的 redis 每个实例单个数据库之间,单独的实例是最好的路线。

      【讨论】:

      • 我不同意多个实例的开销很低。端口号是开发机器上最有限的资源之一,可用性取决于环境,因此无法固定并放入 git 以供团队中的其他人使用。这意味着即使是设计师也必须了解环境变量的工作原理。
      • 例如,我有 github.com/kenn/redis-mutex 这样的库,它使用 db15 进行测试,这样就不会意外踩到贡献者的真实数据。
      • 当然,从技术上讲,可用端口的数量是有限的。但是您真的认为您将在单个开发系统上拥有大约 64,000 个实例吗?务实地说,如果每个实例使用 1Mb 的内存,则需要在具有 64Gb RAM 的系统上。我也会担心开发人员不了解环境变量。您在 github 上的示例项目会破坏我的几个数据库。您根本不能假设给定的数据库编号是“您的”,并且开发人员不会使用您选择的那个。
      • 如果您确实希望实际达到端口限制,请记住这只适用于系统使用的每个 IP 地址。您可以将多个 IP 地址与多个端口结合使用。现实情况是,可用端口会在 CPU、内存和 I/O 之后用完。也就是说,我建议重新审视你的一些基本假设。开发者应该知道redis服务器的名字,但不能指望理解环境变量或者端口号?我敢打赌,你们的开发人员比这更聪明。
      • 我说的是认知开销,而不是物理可用性。除了 6379 还可以选择什么端口号?除此之外的任何事情都太随意了,需要知道什么堆栈使用什么数字等。相比之下,看看 config/database.yml,在 git 中硬编码“my_project_development”已被证明对任何人来说冲突和容易得多。跨度>
      猜你喜欢
      • 2020-09-13
      • 2021-02-02
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多