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

Kar*_*sai 4 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);
Run Code Online (Sandbox Code Playgroud)

这对我来说很理想,因为我可以在同一个实例中缓存我的数据库.但后来我碰到了多个Redis数据库的重点是什么?以及如何在redis数据库之间进行更改?表示" 不鼓励和弃用在同一服务器实例中使用多个数据库"的链接.虽然这些链接确实试图解释其背后的原因,但作为初学者,我仍然无法理解其深层技术方面.

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

for*_*ack 7

如何在没有上述方法的情况下管理同一服务器上的两个网站的缓存?

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

SET A:key1 val1
SET A:key2 val2
LPUSH B:key1 1
SADD B:key2 val
Run Code Online (Sandbox Code Playgroud)

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

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

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

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