首頁>Club>
11
回覆列表
  • 1 # 網路圈

    我們知道,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,這一點要特別注意。

  • 2 # 你看我獨角獸嗎

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

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

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

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

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

  • 3 # 未來架構

    Redis資料庫的預設數量為16,但可以配置為更多。 由於該預設設定,您的配置中可能有16個。透過redis conf,可以改變預設的資料庫數量。

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

  • 4 # 光明右使8787

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

  • 5 # 夕陽雨晴

    redis 為什麼存在16個庫?這個問題在網上搜了一會兒,沒有搜到標準答案,很有可能時當時的開發者基於某種情況設定的一個數值,即預設情況下, redis 會生成 0-15號共16個db,以供不同場景的使用需求。不同的 db 下,相同的key各自獨立。

    而我們可以透過修改 redis 的配置檔案(redis.conf)來修改這種預設 db 的配置個數(修改配置檔案後需重啟才能生效)

    # redis 配置檔案中

    databases 16

    在 redis-cli 下,透過 select 命令來切換資料庫

    127.0.0.1:6379[0]> select 1

    OK

    127.0.0.1:6379[1]>

    透過 CONFIG GET databases 獲取當前的db數

    127.0.0.1:6379[1]> CONFIG GET databases

    1) "databases"

    2) "1"

    而切換到不存在的 db 會報錯

    127.0.0.1:6379[1]> SELECT 16

    (error) ERR DB index is out of range

    要正確地理解 redis 的“資料庫”概念,其不同於關係型資料庫多個庫常用於儲存不同應用程式的資料,且沒有方式可以同時清空例項下的所有庫資料。而 redis 的這些db更像是一種名稱空間,且不適宜儲存不同應用程式的資料。比如可以使用0號資料庫儲存某個應用生產環境中的資料,使用1號資料庫儲存測試環境中的資料,但不適宜使用0號資料庫儲存A應用的資料而使用1號資料庫B應用的資料,不同的應用應該使用不同的Redis例項儲存資料。要特別注意的是以下兩個命令的使用:

    # 清空一個 redis 例項中的當前 db 中的資料

    redis 127.0.0.1:6379> FLUSH

    # 清空一個 redis 例項中所有資料庫中的資料

    redis 127.0.0.1:6379> FLUSHALL

  • 中秋節和大豐收的關聯?
  • 做web開發需要會運維的東西麼?