我有一些目前正在保存到HttpContext.Cache中的对象和类,但是我希望即使在应用程序池被回收或甚至重新启动机器时也要保持这些对象和类。 我尝试使用AppFabric或Memcached,但他们似乎专注于分布式缓存而不是本地缓存。 此外,EF STE与AppFabric结合使用似乎依赖于可序列化的类,我的类中的一些属性是例如对不可序列化的.NET类的引用(例如,我引用了System.Net.WebSockets的实例。 WebSocket作为属性)。
所以我的问题是: 任何人都可以给我任何好的想法或指向一个框架,允许我将类保存到某种持久到磁盘的本地缓存(或数据库,如果它允许我保存任何内容)?
答案 0 :(得分:1)
新的Appfabric 1.1具有读写和后写功能,可以保证缓存的持久性。
通读 - 如果缓存中不存在请求的项目,则可以从后端存储加载数据,然后将其插入缓存中。使用直读式提供程序,缓存会检测缺少的项目并调用提供程序来执行数据加载。然后该项无缝返回到缓存客户端 写在后面 - 同样,可以使用直写式提供程序定期将在缓存中添加或更新的项目写入后端存储。这是异步发生的,并且是在缓存定义的时间间隔内发生的。
查看我的博文,了解实施详情答案 1 :(得分:0)
看看RavenDB - 它是一个NoSQL数据库,但非常轻量级,并且与.net非常集成,所以你可以存储你的类并将它们作为这个类的实例返回。
答案 2 :(得分:0)
如果希望序列化,您应该重新考虑类的结构。但至于手头的问题,如果你想缓存对象并让它们在应用程序池回收中保持不变,那么你应该考虑将HttpContext.Cache
配置为使用SQL Server而不是进程内存。请查看以下链接:
Walkthrough: Using ASP.NET Output Caching with SQL Server
请注意,在任何技术/平台特定资源上使用包装器是一种很好的做法。例如,使用基本上在内部访问CacheWrapper
的{{1}}类会好得多。这样,您可以轻松地更改包装类的实现,以便在需要时使用另一个缓存存储。