我正在将会话管理提供程序从inproc更改为Redis会话状态,以解决Web Garden的共享会话问题以及更好地运行我的MVC应用程序。使用Redis的问题是在放入会话之前必须序列化类,这需要在我现有的解决方案中进行大量修改。有没有办法克服这个问题?是否有任何提供程序可用于在运行时序列化对象?
答案 0 :(得分:3)
我们经历了这样的改变,没有别的办法可以做到。它只是用一个属性标记你的类,所以它不是一件大事。
当你找到一些根本不可序列化的类型时会发生很大的事情 - 比如一个Object然后你需要改变它。每当你进行会话时,一切都必须是可序列化的,因为它们将通过电线。
顺便说一句,你将没有更好的性能,没有什么比保存过程中的数据。在我们这边,我们注意到每个请求还需要4-500毫秒 - 只需加载数据并将数据保存到Redis。但是还有其他一些很大的优势,比如自动缩放。
还要注意,如果你在会话中保存了一些非常大的内容,它可以超时 - 检查redis会话提供程序的throwOnError参数。实际上,更好地缓存大项目(直接将它们存储在redis中)然后将它们保存在Session中,这样就不会为每个请求加载和保存它们。