Redis支持ASP.NET SessionState提供程序

时间:2011-11-09 17:21:47

标签: asp.net asp.net-mvc session redis booksleeve

我目前正在使用Booksleeve开发一个由Redis支持的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

2 个答案:

答案 0 :(得分:16)

我创建了一个基于Redis的SessionStateStoreProvidercan be found on GitHub使用ServiceStatck.Redis作为客户端(而非Booksleeve)。

可以通过NuGet与Install-Package Harbour.RedisSessionStateStore安装。

我在@ NathanD的方法中找到了一些怪癖。在我的实现中,锁存储会话值而不是单独的密钥(减少到Redis的往返)。此外,由于它使用ServiceStack.Redis,因此可以使用池化连接。

最后,它已经过测试。这是我对@ NathanD方法的最大转变。 实际无法知道它是否有效,而无需手动遍历每个用例。

答案 1 :(得分:3)

它不仅有用,而且如果你打算沿着这条路走下去,我强烈认为你会密切关注Redis的Hash数据类型。在我们的应用程序中,会话基本上是一小组密钥和值集合(即:{user_id: 7, default_timezone: 'America/Chicago', ...}),整个用户会话存储在一个Redis散列中。

如果您的会话数据相似,使用Hash不仅可以简化数据映射,而且Redis使用空间much more efficiently进行此方法。

我们的应用程序是红宝石,但您仍可以从what we wrote找到一些用途。