2011-12-23 1464 views
35

是否可以在Redis中創建名稱空間?Redis中的命名空間?

從我發現,所有的全局命令(計數,全部刪除)都適用於所有對象。有沒有辦法創建子空間,以便這些命令在上下文中受到限制?

我不想爲此設置不同的Redis服務器。

我假設答案是「否」,並想知道爲什麼沒有實現,因爲它似乎是一個有用的功能,沒有太多的開銷。

回答

30

Redis服務器可以處理多個數據庫......它們被編號。我認爲它默認提供了32個;您可以使用shell命令的-n選項對shell腳本命令以及對連接參數的類似選項或對其連接對象使用方法來訪問它們。 (在這種情況下.select()是Python的Redis的模塊的方法的名字......我相信它同樣命名爲其他圖書館和接口。

有控制你要多少單獨的數據庫配置文件中的一個選項Redis服務器守護進程也是如此。我不知道什麼是上限,並且似乎沒有辦法動態改變它(換句話說,你似乎必須關閉並重新啓動服務器添加額外的數據庫),而且,似乎沒有必要將這些數據庫名稱與任何名稱關聯起來,也不需要對它們分別使用ACLS,甚至不同的密碼,Redis當然是無模式的好吧

+0

命名空間是不是一個數據庫,該數據庫是由數表示(0〜15)。名稱空間用於添加前綴 – kalelc 2018-01-29 19:03:17

+0

@kalelc:由於術語「名稱空間」未在Redis文檔中定義,因此我認爲您在此處的術語的應用程序不比我的規範更具規範性。我澄清說,給定Redis服務器上的每個「數據庫」都是獨立的「命名空間」(即相同的密鑰不會相互衝突)。顯然你可以創建任意前綴並將它們當作「名稱空間」---但這不是Redis中特別支持的功能;這只是一個使用它的慣例。 – 2018-01-29 20:00:41

+0

感謝Jim的澄清,當我們在Rails中用Redis找到命名空間時,有時會感到困惑。 – kalelc 2018-01-29 20:11:56

0

如果你使用Ruby,你可以看看這些寶石:
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

+0

我不是,但我不明白他們是如何在技術上工作的。我認爲服務器API不支持它們。 – ripper234 2012-01-03 05:53:46

+5

這些僅僅是提供圍繞Redis訪問對象/句柄的大部分透明包裝的方法。在任何引用該「名稱空間」中的任何類型對象的過程中,使用這些簡單地在您的代碼中使用帶有「名稱空間」前綴的任何鍵名前綴。正如你猜測的那樣,服務器端沒有這些隔離,它們僅僅作爲約定存在,甚至可能是內部標準。 – 2012-06-10 07:58:49

+1

它在'redis-namespace'庫的頂部告訴你,這是一個窮人的命名空間,它只是以「ns:*」作爲前綴。 – 2013-10-13 22:52:25