2016-11-20 217 views
1

我使用StackExchange.Redis來存儲和檢索使用多個數據庫的Redis緩存中的項目。獲取所有redis數據庫中的所有密鑰和值?

但是,我不知道如何檢索所有數據庫中的鍵/值。 下面的代碼從默認的數據庫中檢索0鍵,我無法找到如何改變它從每個數據庫

public IEnumerable<KeyValuePair<string, object>> GetAll() 
    { 
     var result = new List<KeyValuePair<string, object>>(); 
     var endpoints = _dataCache.Multiplexer.GetEndPoints(); 
     var server = _dataCache.Multiplexer.GetServer(endpoints.First()); 

     var keys = server.Keys(); 
     foreach (var key in keys) 
     { 
      Console.WriteLine(key.ToString()); 
     } 
     return result; 
    } 

任何建議取回鑰匙?

回答

0

看來我找到了答案 - 需要通過數據庫名稱實際.Keys,如下

var keys = server.Keys(_dataCache.Database); 
+0

可能不是一個好主意,讓這些值在生產,而不是檢查出來的掃描命令。 –

+0

要使用的命令(KEYS或SCAN)將由服務器根據服務器功能決定。 –

0

你需要寫的:var鍵= server.Keys(INT DBNAME); 我在這個例子中添加了如何通過關鍵

public static ConnectionMultiplexer Connection 
{ 
    get 
    { 
     return ConnectionMultiplexer.Connect("serverName: port"); 
    } 
} 

     public Dictionary<string, string> GetDataFromDataBase(srting sPattern = "*") 
     { 
     int dbName = 2; //or 0, 1, 2 
     Dictionary<string, string> dicKeyValue = new Dictionary<string, string>(); 
     var keys = Connection.GetServer("serverName: port").Keys(dbName, pattern: sPattern); 
     string[] keysArr = keys.Select(key =>(string)key).ToArray(); 

     foreach(var key in keysArr) 
     { 
      dicKeyValue.Add(key, GetFromDB(dbName , key)); 
     } 

     return dicKeyValue; 
     } 

    public string GetFromDB(int dbName, string key) 
    { 
     var db = Connection.GetDatabase(dbName); 
     return db.StringGet(key); 
    } 
相關問題