3

我目前正在将一些对象和类保存到 HttpContext.Cache 中,但即使在应用程序池被回收或机器重新启动时,我也想让这些对象和类持久化。我尝试使用 AppFabric 或 Memcached,但它们似乎专注于分布式缓存,而不是本地缓存。此外,与 AppFabric 结合的 EF STE 似乎取决于可序列化的类,并且我的类中的某些属性是例如对不可序列化的 .NET 类的引用(例如,我有对 System.Net.WebSockets 实例的引用。 WebSocket 作为属性)。

所以我的问题是:谁能给我任何好主意或指向一个框架,该框架将允许我将类保存到某种本地缓存中,该缓存可以持久保存到磁盘(或数据库,如果它允许我将任何内容保存到其中) ?

4

3 回答 3

1

新的 Appfabric 1.1 具有通读和后写功能,可保证缓存的持久性。

通读- 如果缓存中不存在请求的项目,则可以从后端存储加载数据,然后将其插入缓存。使用通读提供程序,缓存会检测到丢失的项目并调用提供程序来执行数据加载。然后将该项目无缝返回到缓存客户端。
写入后- 同样,可以使用直写提供程序定期将在缓存中添加或更新的项目写入后端存储。这在缓存定义的时间间隔内异步发生。

您可以在此处查看我的博客文章以了解实现细节http://blogs.msdn.com/b/prathul/archive/2011/12/06/appfabric-cache-read-from-amp-write-to-database-read -通过-write-behind.aspx

于 2012-08-10T04:37:26.407 回答
0

看看 RavenDB - 它是一个 NoSQL 数据库,但非常轻量级并且与 .net 非常集成,因此您可以存储您的类并将它们作为此类的实例返回。

于 2012-08-04T20:16:45.193 回答
0

如果你想让它们序列化,你可能应该重新考虑你的类的结构。但就手头的问题而言,如果您想缓存对象并让它们在应用程序池回收中持久存在,那么您可能应该考虑配置HttpContext.Cache为使用 SQL Server 而不是进程内内存。查看以下链接:

ASP.NET 缓存概述

演练:在 SQL Server 中使用 ASP.NET 输出缓存

请注意,在任何技术/平台特定资源上使用包装器是一种很好的做法。例如,最好使用CacheWrapper基本上在HttpContext.Cache内部访问的类。这样,您可以轻松地更改包装类的实现以在需要时使用另一个缓存存储。

于 2012-08-04T21:06:57.483 回答