使用Redis的ASP.Net会话状态

时间:2014-01-10 11:51:18

标签: asp.net session redis

我正在探索其他存储会话状态的方法,并使用Redis找到了一些网站。

问题在于,该网站已经在生产服务器上开发和部署,因此我无法在一夜之间改变逻辑。

有没有办法,我们可以使用Redis实现自定义会话状态提供程序,并使用相同的方式保存会话密钥。

Redis如何在实现并发后处理并发,即会话密钥/值在每个会话中是唯一的,Redis将如何将值存储在内存中。

是否有其他会话状态管理模型,我已阅读有关memcached的信息,但redis是首选的自定义会话状态实现。

我已尝试使用ServiceStack,AngiesList实现但无法实现相同的功能。

是否有任何与ASP.Net相关的实现? Redis,其中,我们可以将会话状态从InProc转移到Redis。

寻找有利的回复。

谢谢

4 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你的情况与我的相同。请按照以下步骤

  1. 将此添加到您的web.config
  2. Note: if your want to customized Timeout just put Timeout=XX in first tag

    1. 通过NUGet安装包
    2.   

      Harbour.RedisSessionStateStore.1.1.0.0 \ lib中\ net40 \ Harbour.RedisSessionStateStore.dll

答案 1 :(得分:0)

请查看TheCloudlessSky Implementation,我发现它非常有用且简单明了。但是,如果您将CustomObject(您的类)放入会话,您需要确保它已标记为'Serializable'(c# example

此外,如果你有AnonymousType i.e. new {...},你需要至少创建一个简单的类来定义它的值的类型,并在它的头上声明'Serializable'(c# example)。

答案 2 :(得分:0)

在应用程序中搜索单词缓存,如果它们存在,则必须使用序列化和反序列化。否则,您只需要在web.config中进行配置。所有会话对象都将指向配置

中提到的新服务器

答案 3 :(得分:0)

Redis是Session状态的最佳选择,即使是现在跟随Redis Cache的大公司。

要实现这一点,您需要执行很少的步骤。

1。)添加引用RedisSessionStateProvider(使用NetGet包) 2.)在Web.config中添加以下行

<providers><add name="RedisSessionStateStoreProvider" type="RedisAspNetProviders.SessionStateStoreProvider, RedisAspNetProviders" dbNumber="2" keyPrefix="MyWebApplication/SessionState/" connectionStringName="RedisConnectionString" />

</providers>   

<outputCache defaultProvider="RedisOutputCacheProvider">  

  <providers>

    <add name="RedisOutputCacheProvider" type="RedisAspNetProviders.OutputCacheProvider, RedisAspNetProviders" connectionString="100.1000.100.258,connectTimeout=10000" />  

  </providers>

</outputCache>