簡體   English   中英

為什么在同一個實例中使用多個數據庫在 Redis 中是個壞主意?

[英]Why using multiple database in same instance a bad idea in Redis?

我是 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。 另外,簡單來說,如果沒有上述方法,我如何管理同一服務器上的兩個網站的緩存?

如果沒有上述方法,如何在同一服務器上管理我的兩個網站的緩存?

您可以為每個網站使用不同的關鍵標簽 比如說,將這兩個網站命名為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 內部結構更加復雜。

Redis 是單線程的,所以相對於多個數據庫,多個Redis 實例可以發揮多核的優勢。 如果你在一個Redis實例中有多個數據庫,你仍然只能使用一個核心。 另外Redis實例本身的內存占用也很小,所以你不必擔心多個Redis實例成本太高。

Redis 非常快,通常瓶頸是網絡帶寬,而不是CPU。 所以通常你不能通過使用多個 Redis 實例獲得太多收益。 但是,如果您的某個應用程序需要在 Redis 上執行一些慢速命令,並且不希望它阻塞其他應用程序,那么您可以為慢速應用程序創建一個單獨的 Redis 實例,並為其他快速應用程序創建另一個 Redis 實例。

另請注意,Redis Cluster 不支持多個數據庫。

就個人而言,我喜歡這種多數據庫功能。 通常情況下,如果我運行的是Redis實例,而不是Redis Cluster,我會將我的數據放到默認數據庫以外的某個數據庫中,即數據庫0,以避免偶然登錄Redis並在默認數據庫上做一些可怕的事情。 也很容易實現多數據庫的雙緩沖區,例如將數據寫入新數據庫,完成后,使用 SWAPDB 命令自動有效地交換舊數據庫和新數據庫。

它不是。 如果您正在構建支持多個網站的多租戶應用程序,這確實有意義。 如果其中一個網站需要更快速地擴展,您可以單獨為該網站設置不同的實例(或集群),遷移就簡單多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM