Получить выбор объектов сеанса redisstack servicestack на основе значений свойств

Я хочу обновить несколько пользовательских сеансов сервисного стека, которые хранятся в Redis. Я хочу вернуть все сеансы, у которых для пользовательского свойства установлено определенное значение, а затем я могу их обработать. На данный момент лучшее решение, которое у меня есть, возвращает все ключи как таковые:

List<string> sessionkeys = redis.SearchKeys("urn:iauthsession:*");

Я думаю, что это не будет хорошо масштабироваться. Я хотел бы сделать что-то аналогичное:

List<string> sessionkeys = redis.AllKeys.Where(x=>x.ParentId == 3);

Возможно ли это с помощью Redis, и если да, то как, в идеале, используя стандартные библиотеки с ServiceStack.


person richardwhatever    schedule 11.02.2015    source источник


Ответы (1)


Вместо SearchKeys вы хотите использовать более новый Redis Scan API который позволяет перебирать клавиши в курсоре.

Значения Redis забиваются и не индексируются, поэтому возможности оптимизировать это не так много. Наиболее эффективным способом было бы проверить значения с помощью пользовательского на стороне сервера. Операция LUA, которая минимизирует количество запросов и полезных данных, отправляемых клиенту.

Встроенная версия Redis LUA имеет cjson, который можно использовать для десериализации значений JSON, Руководство по Lua для пользователей Redis содержит несколько примеров использования этого.

Поскольку Redis не поддерживает запросы или индексы на стороне сервера, способ Redis заключается в том, чтобы упреждать запросы, которые вам нужно запрашивать, и поддерживать настраиваемые индексы всякий раз, когда сохраняется сеанс, некоторая информация о том, как поддерживать настраиваемые индексы в Redis, находится по адресу:

В ServiceStack вы можете переопределить OnSaveSession() в своем AppHost, который вызывается всякий раз, когда сохраняется сеанс.

person mythz    schedule 12.02.2015
comment
отлично ответил на мой вопрос. и мой следующий вопрос тоже! - person richardwhatever; 12.02.2015