2015-02-20 4 views
2

Я пытаюсь найти несколько ключей, которые следуют шаблону, но мне нужны все связанные ключи, а не только те, что указаны на конкретном сервере.StackExchange.Redis как запросить все ключи db

До сих пор я пытаюсь получить доступ к определенному серверу, используя пример документации, но он не работает.

 var connection = ConnectionMultiplexer.Connect(new ConfigurationOptions 
     { 
      EndPoints = { { DemoSettings.CustomerRedisCache.Url, DemoSettings.CustomerRedisCache.Port } }, 
      Password = DemoSettings.CustomerRedisCache.Password 
     }); 

     var server = connection.GetServer(host: DemoSettings.CustomerRedisCache.Url, 
              port: DemoSettings.CustomerRedisCache.Port); 
     var cadena = "cust:" + data.SearchString.Replace(' ', ':')+"*"; 
     var valores = server.Keys(pattern: cadena); 

Последняя строка всегда терпит неудачу из-за тайм-аута: S

Я признателен за любую помощь.

ответ

4

Во-первых, какая версия сервера redis вы используете? Доступные команды сервера различаются между серверами, а в версиях до 2.8 вместо команды должна использоваться команда . Команда KEYS хорошо известна тем, что вызывает серьезные проблемы с производительностью и никогда не должна использоваться в производстве, за исключением, возможно, для подчиненного устройства. Если вы используете < 2.8, да, я бы ожидал, что KEYS вызовет таймауты.

Однако, в конечном итоге оба SCAN и KEYS предполагают, что вы не используете redis по-своему. Вы никогда не должны пытаться использовать эти команды для регулярных операций. Единственными инструментами, которые должен использовать их регулярно, являются инструменты для администрирования/данных. И они должны идеально ориентироваться на рабов, а не на мастеров.

Есть, как правило, альтернативные способы, чтобы сделать что-нибудь, что люди, как правило, хотят SCAN и KEYS для - например, путем хранения ключей в определенной группе в одном наборе (SADD и т.д.)

+0

Я использую REDIS кэш на Лазуре. На самом деле я просто пытаюсь запустить демо-версию и сделать работу, как ожидалось. Я полагаю, что лучший способ достичь этой задачи - сохранить фактические ключи в другом словаре, действующем как индекс? – JuanK

+0

@JuanK, что действительно заставляет нас задаться вопросом, дает ли Azure информацию о версии сервера; Я бы ожидал, что Azure откроет «SCAN», а не только «KEYS» - и «SCAN» не должен таймаут –

+1

Как я могу попросить SCAN вместо KEYS с помощью StackOverflow.Redis? Извините, если это глупый вопрос, но я просто реализую свое первое приложение Redis. – JuanK

Смежные вопросы