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

时间:2017-04-06 03:05:48

标签: c# redis stackexchange.redis

我是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?链接,这些链接表示"在同一服务器实例中使用多个数据库不鼓励已弃用& #34 ;.虽然这些链接确实试图解释其背后的原因,但作为初学者,我仍然无法理解其深层技术方面。

任何人都可以用更简单的术语解释为什么不鼓励使用同一服务器实例的多个redis db。另外,简单来说,如何在没有上述方法的情况下管理同一服务器上的两个网站的缓存?

2 个答案:

答案 0 :(得分:6)

  

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

您可以为每个网站使用不同的密钥标记。比如说,将这两个网站命名为AB。对于网站A的所有密钥,请为每个密钥指定一个前缀(密钥标记):A:。另一方面,为网站B提供另一个前缀:B:。通过这种方式,您可以为每个网站提供唯一的密钥命名空间。

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

任何人都可以用更简单的术语解释为什么不鼓励使用同一服务器实例的多个redis db。

AFAIK,多个数据库不鼓励和弃用。这是一种为不同应用程序隔离关键命名空间的方法。

Redis是单线程,因此与多个数据库相比,多个Redis实例可以利用多个核心。如果一个Redis实例中有多个数据库,则仍然只能使用一个核心。

Redis非常快,通常瓶颈是网络带宽, CPU。因此,通常使用多个Redis实例不会获得太多收益。但是,如果您的某个应用程序需要在Redis上执行一些慢速命令,并且不希望它阻止其他应用程序,则可以为 slow 应用程序创建单独的Redis实例,并使用另一个Redis其他 fast 应用程序的实例。

答案 1 :(得分:2)

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