2012-05-25 118 views
4

默認情況下,Redis配置有16個數據庫,編號爲0-15。這只是名稱空間的一種形式,還是存在數據庫隔離對性能的影響?例如,如果我使用默認數據庫(0),並且我有1000萬個密鑰,則最佳做法建議使用密鑰命令通過通配符模式查找密鑰效率不高。但是如果我存儲我的主要密鑰,也許是8個分段密鑰的前4個分段,那麼在一個單獨的數據庫(比如數據庫3)中產生更小的密鑰子集。 Redis會將這些看作是一組較小的密鑰,還是將所有數據庫中的所有密鑰都看作是一個巨大的密鑰索引?通過數據庫分段Redis

更明確地說,在時間複雜度而言,如果我的數據庫是這樣的:

  • 數據庫0:10,000,000鍵
  • 數據庫3:10,000鍵

會的時間複雜度針對數據庫3的呼叫爲O(10m)或將它爲O(10k)

謝謝你的時間。

回答

6

Redis爲每個數據庫都有單獨的字典。從你的例子中,對數據庫3的密鑰調用將是O(10K)

也就是說,使用keys是違背最佳實踐的。此外,針對同一應用程序使用多個數據庫也會違反最佳做法。如果你想遍歷鍵,你應該以特定於應用程序的方式對它們進行索引。 SortedSet是構建索引的好方法。

參考文獻:

  1. redisServer具有redisDB一個陣列中的結構。 See redisServer in redis.h
  2. 每個redisDB都有自己的字典對象。 See redisDB in redis.h
  3. keys命令對當前數據庫的字典進行操作