redis為什麼存在16個庫?

很無辜也很無奈


我們知道,Redis是當前最為流行的NoSQL數據庫,由於其高效的性能,現在Redis也成為了IT架構中不少缺少的選型。對於Redis,很多開發者把它當成了緩存來使用,說實話,估計很多人都不知道Redis默認有16個“數據庫”實例。

Redis默認有多個數據庫

我們在對Redis中的Key進行操作時,其實是在對指定的某個數據庫中的Key進行操作。默認情況下,Redis在安裝後自帶有16個數據庫,序號從0開始一直到15,如果我們不指定要操作的數據庫,其實操作的就是默認數據庫(編號為0)。

如果要切換數據庫,我們使用Redis中的select命令即可,如下圖示:

這裡需要注意的是:Redis中的“數據庫”和我們傳統的關係型數據庫還是不同的,Redis中的數據庫可以理解為是“命名空間”,而且Redis中的數據庫不支持自定義名稱也不支持為每個庫分配獨立的授權密碼等。

當然了,我們也可以通過更改Redis配置文件來更改Redis中數據庫的個數上限。

Redis為什麼要支持多個數據庫?

Redis之所以支持多個數據庫,其目的就是為了對數據進行隔離。比如:某個公司有多個項目線,為了防止不同項目間可能出現的Key名衝突,那不同項目就可以使用不同序號的數據庫。

但是,Redis中的數據隔離得並不是完全的隔離,我們依舊可以使用 > flushall 來清空所有的數據庫中的所有Key,這一點要特別注意。


網絡圈


簡單來說,在同一redis實例中使用redis數據庫有一個明顯的優勢,那就是管理。如果您為每個應用程序啟動一個單獨的實例,並且假設您有3個應用程序,那麼這就是3個獨立的redis實例,每個實例在生產中可能都需要一個HA從屬實例,因此總共有6個實例。從管理的角度來看,這很快就會變得混亂不堪,因為您需要監視所有這些,進行升級/修補等。如果您不打算通過高I / O重載Redis,那麼具有從屬的單個實例會更簡單,並且只要滿足您的SLA,就更易於管理。

Redis的多個實例使您可以利用多個核心,在監視和管理多個實例其實也不困難,可以根據你不同的需求用不同的指標管理不同的數據庫。

實際上,通過基於實例的隔離,您將在每個數據庫上獲得更好的指標。每個實例將具有反映該數據段的統計信息,這可以允許進行更好的調整以及更敏感和更準確的監視。

正如大多數開發者的想法一樣,不要輕易使用keys命令。如果僅創建一個鍵索引,就會發現更好的性能。每當添加密鑰時,請將密鑰名稱添加到集合中。一旦擴大規模,keys命令就不會非常有用,因為返回將花費大量時間。

讓訪問模式確定如何構造數據,而不是按照您認為的工作方式存儲數據,然後解決如何訪問數據並將其切碎的問題。您會擁有更好的性能,並且發現使用數據的代碼通常更乾淨,更簡單。


大魔王Hacker


Redis數據庫的默認數量為16,但可以配置為更多。 由於該默認設置,您的配置中可能有16個。通過redis conf,可以改變默認的數據庫數量。


多個數據庫(在Redis中)是一種邏輯上對數據進行分區/隔離的方法(例如,“命名空間”,“鍵空間”或RDBMS術語中的模式schema)。


中關村技術乾貨


Redis是一個字典結構的存儲服務器,而實際上一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。這與我們熟知的在一個關係數據庫實例中可以創建多個數據庫類似,所以可以將其中的每個字典都理解成一個獨立的數據庫。

每個數據庫對外都是一個從0開始的遞增數字命名,Redis默認支持16個數據庫(可以通過配置文件支持更多,無上限),可以通過配置databases來修改這一數字。客戶端與Redis建立連接後會自動選擇0號數據庫,不過可以隨時使用SELECT命令更換數據庫,如要選擇1號數據庫:

然而這些以數字命名的數據庫又與我們理解的數據庫有所區別。首先Redis不支持自定義數據庫的名字,每個數據庫都以編號命名,開發者必須自己記錄哪些數據庫存儲了哪些數據。另外Redis也不支持為每個數據庫設置不同的訪問密碼,所以一個客戶端要麼可以訪問全部數據庫,要麼連一個數據庫也沒有權限訪問。最重要的一點是多個數據庫之間並不是完全隔離的,比如FLUSHALL命令可以清空一個Redis實例中所有數據庫中的數據。綜上所述,這些數據庫更像是一種命名空間,而不適宜存儲不同應用程序的數據。比如可以使用0號數據庫存儲某個應用生產環境中的數據,使用1號數據庫存儲測試環境中的數據,但不適宜使用0號數據庫存儲A應用的數據而使用1號數據庫B應用的數據,不同的應用應該使用不同的Redis實例存儲數據。由於Redis非常輕量級,一個空Redis實例佔用的內在只有1M左右,所以不用擔心多個Redis實例會額外佔用很多內存。


虎小哥



編程俠


起數據隔離作用,flushall的時候不會影響其它庫。實際環境中很少用到,REDIS是單線程應用,只能使用一顆核心,所以要用多個庫,最好是用多個端口,把負荷分散到每個核心上,提高CPU利用率。


光明右使8787


redis 配置文件redis.conf中有相關的配置的

# Set the number of databases. The default database is DB 0, you can select

# a different one on a per-connection basis using SELECT <dbid> where/<dbid>

# dbid is a number between 0 and 'databases'-1

databases 16

可以修改的


分享到:


相關文章: