注意:Redis支援多個資料庫,且每個資料庫的資料是隔離的不能共享,並且基於單機才有,如果是叢集就沒有資料庫的概念。
redis之所以分這麼多資料庫,也是為了區分業務,不同的業務存放在不同的庫,但是一個redis,一般是給一個專案用,專案內的不同業務,單獨用一個函式庫,這樣不會互相有資料交叉。
Redis是字典結構的儲存伺服器,而實際上一個Redis實例提供了多個用來儲存資料的字典,客戶端可以指定將資料儲存在哪個字典中。這與我們熟知的在一個關係資料庫實例中可以建立多個資料庫類似,所以可以將其中的每個字典理解成一個獨立的資料庫。
每個資料庫對外都是一個從0開始的遞增數字命名,Redis預設支援16個資料庫(可以透過設定檔支援更多,無上限),可以透過設定databases來修改這一數字。用戶端與Redis建立連線後會自動選擇0號資料庫,不過可以隨時使用SELECT指令更換資料庫,如要選擇1號資料庫:
redis> SELECT 1 OK redis [1] > GET foo (nil)
然而這些以數位命名的資料庫又與我們理解的資料庫有所區別。
首先Redis不支援自訂資料庫的名字,每個資料庫都以編號命名,開發者必須自行記錄哪些資料庫儲存了哪些資料。
另外Redis也不支援為每個資料庫設定不同的存取密碼,所以一個客戶端要嘛可以存取全部資料庫,要嘛連一個資料庫也沒有權限存取。
最重要的一點是多個資料庫之間並不是完全隔離的,例如FLUSHALL指令可以清空一個Redis實例中所有資料庫中的資料。
綜上所述,這些資料庫更像是一種命名空間,而不適合儲存不同應用程式的資料。例如可以使用0號資料庫儲存某個應用程式生產環境中的數據,使用1號資料庫儲存測試環境中的數據,但不適宜使用0號資料庫儲存A應用的資料而使用1號資料庫B應用的數據,不同的應用應該使用不同的Redis實例來儲存資料。
由於Redis非常輕量級,一個空Redis實例佔用的內在只有1M左右,所以不用擔心多個Redis實例會額外佔用很多記憶體。
以上是redis為什麼有16個函式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!