2016-11-20 17 views
1

私はStackExchange.Redisを使用して、複数のデータベースを使用してredisキャッシュ内の項目を格納および取得しています。すべてのredisデータベースのキーと値をすべて取得しますか?

ただし、すべてのデータベースでキー/値を取得する方法を理解できません。

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からキーを取得し、私はそれを変更する方法を見つけることができませんか?

答えて

0

私が答えを見つけたようだ - 実際.Keysにデータベース名を渡す必要、

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

おそらくない良いアイデアで値を取得する代わりに、SCANコマンドをチェックアウトする方法を例に追加しました。 –

+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); 
    } 
関連する問題