Redis поддерживает ASP.NET провайдера SessionState
В настоящее время я разрабатываю настраиваемый поставщик ASP.NET SessionState, который поддерживается Redis с помощью Booksleeve. Redis казался идеально подходящим для SessionState (если вы его должны использовать), потому что:
- Redis может храниться долгое время, как RDBMS, однако он намного быстрее.
- Хранилище данных Key/Value лучше подходит для интерфейса SessionState.
- Так как данные не хранятся в процессе (например, поставщик сеанса по умолчанию), SessionState может перегружать веб-сервер, сбои и т.д.
- Redis легко осколоть горизонтально, если это становится проблемой.
Итак, мне интересно, будет ли это полезно кому-либо, поскольку мы (моя компания) рассматриваем возможность открытого поиска на GitHub. Мысли?
UPDATE:
Я опубликовал первую версию этого вчера: https://github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs
Ответы
Ответ 1
Я создал основанный на Redis SessionStateStoreProvider
, который можно найти в GitHub, используя ServiceStatck.Redis
в качестве клиента (а не в Booksleeve).
Он может быть установлен через NuGet с помощью Install-Package Harbour.RedisSessionStateStore
.
Я нашел несколько причуд с подходом @NathanD. В моей реализации блокировки сохраняются со значением сеанса, а не отдельным ключом (менее округлые поездки до Redis). Кроме того, поскольку он использует ServiceStack.Redis
, он может использовать объединенные соединения.
Наконец, он протестирован. Это был мой самый большой отход от подхода @NathanD. Не было никакого способа узнать, работает ли это, не запуская каждый случай использования вручную.
Ответ 2
Не только это было бы полезно, но я настоятельно рекомендую вам внимательно посмотреть на тип данных Hash Redis, если вы планируете пойти по этой дороге. В нашем приложении сеанс представляет собой в основном небольшую коллекцию ключей и значений (т.е. {user_id: 7, default_timezone: 'America/Chicago', ...}
) со всем сеансом пользователя, хранящимся в одном хэше Redis.
Не только использование хэша упрощает сопоставление данных, если ваши данные сеанса схожи, но Redis использует пространство гораздо более эффективно с этим подходом.
Наше приложение находится в рубине, но вы все равно можете найти от то, что мы написали.