具有多个项目的开发机器上的Redis数据库

时间:2011-02-28 22:35:31

标签: redis

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

有两个主要问题:

  1. Redis没有命名数据库(仅限数字0-16)
  2. 测试可能会在每次运行时执行FLUSHDB
  3. 目前,我认为我们有三种选择:

    1. 为每个项目,每个开发和测试环境分配不同的数据库
    2. 使用类似redis-namespace
    3. 之类的项目名称作为前缀键
    4. 在项目之间切换时随时对数据库进行Nuke和种子播放
    5. 如果多个项目为主要用途分配“0”而对于测试等分配“1”,则第一个是有问题的。即使项目B决定改为“2”和“3”,项目中的另一名成员也可能在另一个项目中与他发生冲突。换句话说,这种方法不是SCM友好的。

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

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

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

      任何想法,做法?

2 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:0)

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

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

听起来你的开发,测试和产品环境非常紧密。如果是这样,我建议远离那个。使用单独的实例是最简单的方法,并提供针对交叉污染的保护。在这个和未来的redis之间是每个实例的单数据库,单独的实例是最好的路由。