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一些用处。
- 在file upload过程中使用Javascript获取图像尺寸
- 使用程序集中的Web应用程序版本号(ASP.NET / C#)
- 在C#中确定会话variables的最佳方法是null或空?
- 如何强制netwtonsoft json序列化程序将datetime属性序列化为string?
- 使用iPhone UIWebView的Asp.Net Forms身份validation
- Asp.net身份密码哈希
- 将DTO映射到域对象的最佳实践?
- 你可以在Windows应用程序中使用asp.net成员资格提供程序?
- 在ASP.NET中,什么时候应该使用Session.Clear()而不是Session.Abandon()?