我会将我的 ASP.NET MVC4 应用程序作为冗余 Azure 应用程序托管。在会话期间,应用程序执行计算量大的操作,这些操作会产生不可序列化的对象。对象的创建是可重复的;每次需要对象时,我都可以执行昂贵的操作,但我更愿意第一次执行,然后保存对象以供以后重用。
我想使用 Azure 中的标准分布式会话状态机制来存储通常的会话状态信息,但该机制要求会话数据是可序列化的。我可以使用另一种机制来缓存创建成本高、不可序列化的对象吗?
鲍勃
目前,Windows Azure 提供的所有分布式缓存服务都需要序列化,不仅是共享缓存,专用/同位缓存也是如此。
但是如果要在内存缓存中使用,则不需要序列化。但这不利于横向扩展,如果您只有 1 个实例,您可能无法拥有 azure SLA。
所以我的建议是优化你的序列化并尝试使用 azure 缓存。
这些对象是否必须存储在集中存储中,或者您可以将它们存储在“InProc”会话状态中吗?
如果没有,恐怕您需要将它们序列化为某些东西(SQL Azure、文件、应用程序结构缓存等)。
因此,要么找到一种方法将它们序列化为可持久化的东西,要么将它们存储在 RAM 中,在每个 Web 服务器上都有一个额外的副本