2016-11-20 219 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); 
    } 
相关问题