net microsoft extensions control cache asp asp.net asp.net-mvc session redis booksleeve

microsoft - Proveedor de sesión de ASP.NET SessionState respaldado por Redis



redis cache in.net core (2)

No solo sería útil, sino que considero firmemente que observa detenidamente el tipo de datos Hash de Redis si planea seguir por este camino. En nuestra aplicación, la sesión es básicamente una pequeña colección de claves y valores (es decir: {user_id: 7, default_timezone: ''America/Chicago'', ...} ) con toda la sesión de usuario almacenada en un solo redis hash.

El uso de Hash no solo simplifica el mapeo de los datos si los datos de la sesión son similares, sino que Redis utiliza el espacio de forma mucho más eficiente con este enfoque.

Nuestra aplicación está en ruby, pero aún puede encontrar algo de uso de lo que escribimos .

Actualmente estoy desarrollando un proveedor personalizado de ASP.NET SessionState respaldado por Redis usando Booksleeve. Redis parecía un ajuste perfecto para SessionState (si debe usarlo) porque:

  • Redis puede almacenar de forma duradera como un RDBMS, sin embargo, es mucho más rápido.
  • Un almacén de datos clave / valor se adapta mejor a la interfaz de SessionState.
  • Debido a que los datos no se almacenan en el proceso (como el proveedor de sesión predeterminado), SessionState puede agotar los reinicios, bloqueos, etc. del servidor web.
  • Redis es fácil de fragmentar horizontalmente si eso se convierte en una necesidad.

Entonces, me pregunto si esto será útil para cualquiera ya que nosotros (mi compañía) estamos considerando abrirlo en GitHub. ¿Pensamientos?

ACTUALIZAR:

Ayer https://github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs una primera versión de esto: https://github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs


SessionStateStoreProvider basado en SessionStateStoreProvider que se puede encontrar en GitHub usando ServiceStatck.Redis como cliente (en lugar de Booksleeve).

Se puede instalar a través de NuGet con Install-Package Harbour.RedisSessionStateStore .

Encontré algunos caprichos con el enfoque de @ NathanD. En mi implementación, los bloqueos se almacenan con el valor de la sesión en lugar de en una clave separada (menos viajes redondos a Redis). Además, debido a que usa ServiceStack.Redis , puede usar conexiones agrupadas.

Finalmente, está probado. Este fue mi mayor desvío del enfoque de @ NathanD. No había forma de saber realmente si funcionaba sin pasar por cada caso de uso manualmente.