Получить все ключи и значения из всех баз данных Redis?

Я использую StackExchange.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;
    }

Какие-либо предложения?


person Michael    schedule 20.11.2016    source источник


Ответы (3)


кажется, я нашел ответы - нужно передать имя базы данных фактическим .Keys, как показано ниже

var keys = server.Keys(_dataCache.Database);
person Michael    schedule 20.11.2016
comment
Вероятно, это не очень хорошая идея в производстве, вместо этого проверьте команду SCAN. - person Chris Tanner; 21.11.2016
comment
какая команда будет использоваться (KEYS или SCAN) будет решаться сервером в зависимости от возможностей сервера. - person Arkhangelskiy Evgeniy; 06.12.2016
comment
И как мне получить значения из переменной ключей? - person Jay Shah; 19.05.2018

Вам нужно написать: var keys = 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);
    }
person DLab    schedule 13.07.2017

person    schedule
comment
Пожалуйста, добавьте содержание к этому ответу - person Paul Dawson; 21.08.2019
comment
Пожалуйста, объясните, как ваш код устраняет проблемы, представленные в вопросе. - person Michael Kolber; 21.08.2019