2016-11-20 3 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

- 당신은 쓸 필요가

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

아마 좋은 생각하여 값을 얻을 대신 SCAN 명령을 확인하는 방법의 예에 추가. –

+0

사용할 명령 (KEYS 또는 SCAN)은 서버 기능에 따라 서버에 의해 결정됩니다. –

0

아래와 같이 실제 .Keys에 데이터베이스 이름을 전달해야합니다 : 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); 
    }