【问题标题】:Why using multiple database in same instance a bad idea in Redis?为什么在 Redis 中在同一实例中使用多个数据库是个坏主意?
【发布时间】:2017-08-31 21:08:14
【问题描述】:

我是 redis 的新手,因此我不太了解它的复杂技术。但是让我把我的场景放在这里:我在同一台服务器上运行两个网站,我希望 redis 在这两个网站上都可以工作。在搜索时,我发现我可以通过为同一服务器实例上的不同数据库分配不同的索引来做到这一点,如下所示:

//In my first website (development)
Idatabase dbOfDev=_conn.GetDatabase(0);

//In my second website (production)
Idatabase dbOfProd=_conn.GetDatabase(1);

这对我来说非常理想,因为我可以在同一个实例中缓存我的两个数据库。但后来我碰到了What's the Point of Multiple Redis Databases?How do I change between redis database? 链接,上面写着“在同一服务器实例中使用多个数据库是不鼓励弃用”。尽管这些链接确实试图解释其背后的原因,但作为初学者,我仍然无法理解其深层技术方面。

谁能用更简单的术语解释为什么不鼓励使用同一服务器实例的多个 redis db。另外,简单来说,如果没有上述方法,我如何管理我的两个网站在同一台服务器上的缓存?

【问题讨论】:

    标签: c# redis stackexchange.redis


    【解决方案1】:

    如果没有上述方法,我如何在同一台服务器上管理我的两个网站的缓存?

    您可以为每个网站使用不同的key tag。比如说,将这两个网站命名为AB。对于网站A的所有键,给每个键一个前缀(键标签):A:。另一方面,给网站B 的每个键加上另一个前缀:B:。这样,您就可以为每个网站拥有一个唯一的键命名空间。

    SET A:key1 val1
    SET A:key2 val2
    LPUSH B:key1 1
    SADD B:key2 val
    

    还可以查看this answer 了解更多解决方案。

    谁能用更简单的术语解释为什么不鼓励使用同一服务器实例的多个 redis db。

    AFAIK,多数据库功能 不鼓励和弃用。这是一种为不同应用程序隔离关键名称空间的方法。然而,Redis 的作者考虑 Redis 多个数据库错误是我在 Redis 设计中最糟糕的决定 全部,因为它使 Redis 内部更加复杂。

    Redis 是单线程的,所以相比多数据库,多个 Redis 实例可以利用多核。如果你在一个 Redis 实例中有多个数据库,你仍然可以只使用一个核心。而且 Redis 实例本身的内存占用很小,所以您不必担心多个 Redis 实例会花费太多。

    Redis 非常快,通常瓶颈是网络带宽,不是 CPU。所以通常你不能通过使用多个 Redis 实例获得太多收益。但是,如果您的一个应用程序需要在 Redis 上执行一些慢速命令,并且不希望它阻塞其他应用程序,您可以为 slow 应用程序拥有一个单独的 Redis 实例,并拥有另一个 Redis其他快速应用程序的实例。

    还要注意 Redis Cluster 不支持多个数据库。

    就个人而言,我喜欢这种多数据库功能。通常,如果我运行的是 Redis 实例,而不是 Redis 集群,我会将我的数据放入默认数据库以外的某个数据库中,即数据库 0,以避免意外登录 Redis 并在默认数据库上做一些可怕的事情。此外,使用多个数据库实现双缓冲区也很容易,例如将数据写入新数据库,完成后,使用 SWAPDB 命令自动高效地交换旧数据库和新数据库。

    【讨论】:

    【解决方案2】:

    事实并非如此。如果您正在构建一个支持多个网站的多租户应用程序,那确实很有意义。如果其中一个网站需要更快速地扩展,您可以单独为该网站设置一个不同的实例(或集群),并且迁移要简单得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多