Redis支持ASP.NET SessionState provider

我目前正在开发一个由Redis使用Booksleeve支持的ASP.NET SessionState自定义提供程序。 Redis看起来非常适合SessionState(如果您必须使用它),因为:

  • Redis可以像RDBMS一样持久存储,但速度要快得多。
  • 键/值数据存储更适合SessionState的接口。
  • 由于数据不是在进程内存储的(像默认的Session提供程序),SessionState可以实现Web服务器重启,崩溃等。
  • Redis很容易水平分割,如果这成为一个需要。

所以,我想知道这是否会对任何人有用,因为我们(我的公司)正在考虑在GitHub上开源。 思考?

更新:


我昨天发布了第一个版本: https : //github.com/angieslist/AL-Redis/blob/master/AngiesList.Redis/RedisSessionStateStore.cs

我创build了一个基于Redis的SessionStateStoreProvider , 可以在GitHub上使用ServiceStatck.Redis作为客户端(而不是Booksleeve)。

它可以通过NuGet与Install-Package Harbour.RedisSessionStateStore

我用NathanD的方法发现了一些怪癖。 在我的实现中,锁是使用会话值存储的而不是存储在单独的密钥中(对Redis的往返次数less)。 此外,因为它使用ServiceStack.Redis ,它可以使用池连接。

最后,它被testing。 这是我最大的@ NathanD的方法closures。 没有办法实际上知道它是否工作,而不需要手动运行每个用例。

这不仅是有用的,但是我强烈地认为,如果你打算沿着这条路走下去,你会仔细看看Redis的Hash数据types。 在我们的应用程序中,会话基本上是一个小键盘和值的集合(即: {user_id: 7, default_timezone: 'America/Chicago', ...} ),整个用户会话存储在一个Redis哈希中。

如果您的会话数据相似,使用Hash不仅简化了映射数据,而且Redis使用此方法的空间效率更高 。

我们的应用程序是ruby,但你仍然可以从我们写的东西中find一些用处。