C# 迁移到Redis会话状态时遇到问题

C# 迁移到Redis会话状态时遇到问题,c#,asp.net,asp.net-mvc-4,session,redis,C#,Asp.net,Asp.net Mvc 4,Session,Redis,我将会话管理提供程序从inproc更改为Redis会话状态,以解决Web Garden的共享会话问题,并提高MVC应用程序的性能。使用Redis的问题是,类必须在放入会话之前序列化,这需要对现有解决方案进行大量修改。有没有办法克服这个问题?是否有任何提供程序可用于在运行时序列化对象?我们经历了这样的更改,没有其他方法可以做到这一点。它只是用一个属性标记类,所以这并不是什么大事。 当您发现某些类型根本不可序列化时,比如对象,那么您需要更改它,这会带来很大的影响。无论何时,当会话处于进程外时,所有内

我将会话管理提供程序从inproc更改为Redis会话状态,以解决Web Garden的共享会话问题,并提高MVC应用程序的性能。使用Redis的问题是,类必须在放入会话之前序列化,这需要对现有解决方案进行大量修改。有没有办法克服这个问题?是否有任何提供程序可用于在运行时序列化对象?

我们经历了这样的更改,没有其他方法可以做到这一点。它只是用一个属性标记类,所以这并不是什么大事。 当您发现某些类型根本不可序列化时,比如对象,那么您需要更改它,这会带来很大的影响。无论何时,当会话处于进程外时,所有内容都必须是可序列化的,因为它们将经过连接。

顺便说一句,您不会有更好的性能,没有什么比在过程中保存数据更好的了。在我们这方面,我们注意到每个请求都会额外增加约4-500毫秒的时间,这只是为了将数据加载并保存到Redis。但是还有其他的优势,比如自动缩放


还要注意的是,如果您在会话中保存了一些非常大的内容,它可能会超时-检查redis会话提供程序的throwOnError参数。实际上,最好先缓存大项目(直接存储在redis中),然后在会话中保存它们,这样就不会为每个请求加载和保存它们。

来自@lcostea的回答是正确的,如果您希望能够跨多个应用服务器扩展应用程序,您只需完成这项工作。这里没有魔法。