当前位置: 首页 > 知识库问答 >
问题:

为什么在Redis中在同一个实例中使用多个数据库是个坏主意?

张丁雷
2023-03-14

我对redis是新的,所以我不知道更多关于它复杂的技术细节。但是让我把我的场景放在这里:我在同一个服务器上运行两个网站,我希望redis在这两个网站上工作。在搜索中,我发现可以通过如下所示为同一服务器实例上的不同数据库分配不同的索引来做到这一点:

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

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

这对我来说是理想的,因为我可以在同一个实例中缓存我的两个数据库。但后来我碰到了多个Redis数据库有什么意义?如何在redis数据库之间进行转换?链接上写着“在同一服务器实例中使用多个数据库是不鼓励和不推荐的”。虽然这些链接试图解释它背后的原因,但作为一个初学者,我仍然无法理解它的深层技术层面。

有人能用更简单的术语解释为什么不鼓励使用同一服务器实例的多个redis db的原因吗?此外,简单地说,我如何在没有上述方法的情况下管理同一服务器上的两个网站的缓存

共有1个答案

令狐建修
2023-03-14

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

您可以为每个网站使用不同的关键标签。例如,将这两个网站命名为AB。对于网站a的所有键,给每个键一个前缀(键标记):a:。另一方面,为网站b的每个键赋予另一个前缀:b:。这样,您就可以为每个网站拥有唯一的密钥命名空间。

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

更多解决方案请查看此答案。

还要注意,Redis集群不支持多个数据库

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

 类似资料:
  • 我们将redis用于缓存和会话。我希望能够使用分离redis数据库(相同的服务器,只是不同的数据库)为每个情况,以及能够使用相同的服务器生产和预生产。我知道Redis允许您在一台服务器上定义多个数据库(http://www.redisocokbook.org/multiple_databases.html),但是我不知道如何将其翻译成Redis。配置(至少根据文档http://laravel.co

  • 问题内容: 因此,我来​​到了一个地方,我想将存储在Redis中的数据分割到单独的数据库中,因为有时我需要对一种特定类型的数据使用keys命令,并希望将其分离以使其更快。 如果我细分为多个数据库,那么所有内容仍然都是单线程的,而且我仍然只能使用一个内核。如果我只是在同一盒子上启动另一个Redis实例,那么我将使用一个额外的内核。最重要的是,我无法命名Redis数据库,也无法给它们提供任何更逻辑的标

  • 问题内容: 有人告诉我不要在JavaScript中使用数组。为什么不? 问题答案: 原因是一种构造: 有时可能与另一个完全不同: 还请注意,JavaScript库可能会执行以下操作,这会影响您创建的任何数组:

  • 问题内容: 为什么Catch(Exception)一个坏主意? 问题答案: 因为当你捕获异常时,你应该正确处理它。而且,你不能期望在代码中处理所有类型的异常。同样,当你捕获所有异常时,你可能会得到一个无法处理的异常,并阻止堆栈中位于较高位置的代码正确处理它。 一般原则是捕获可能的最特定类型。

  • 如果我分割成多个数据库,所有的东西仍然是单线程的,而且我仍然只能使用一个核心。如果我只是在同一个盒子上启动另一个Redis实例,我将使用一个额外的核心。最重要的是,我不能给Redis数据库命名,也不能给它们任何更符合逻辑的标识符。那么,说完所有这些,为什么/什么时候我会想要使用多个Redis数据库,而不是仅仅为我想要的每个额外数据库构建一个额外的Redis实例呢?与此相关的是,为什么Redis不尝

  • 本文向大家介绍为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?,包括了为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?的使用技巧和注意事项,需要的朋友参考一下 在大多数情况下,通常最好使用' for '循环而不是“ for ... in ”循环,因为“ for ... in ”循环会产生索引 ,而不会打扰剩余的索引普通的“ for ”循环显示