我该使用什么框架来获取持久化缓存?

3
我有一些对象和类,目前我正在将它们保存到HttpContext.Cache中,但是我希望即使应用程序池被重启或者机器被重启时,它们也能保持持久性。 我尝试着使用AppFabric或Memcached,但它们似乎更专注于分布式缓存而不是本地缓存。 此外,结合AppFabric的EF STE似乎依赖于可序列化的类,我的类中一些属性例如引用了不能序列化的.NET类(例如我有一个System.Net.WebSockets.WebSocket实例的引用作为属性)。
所以我的问题是: 有没有人可以给我任何好的想法或者指向一个框架,使我能够将类保存到某种本地缓存中,且该缓存对磁盘(或允许我将任何东西保存到数据库中)具有持久性?

2
使用一个数据库 - 一个可以完全加载到内存中的嵌入式数据库。 - Oded
2
套接字本质上无法被干净地序列化或持久化。 - Daniel A. White
3个回答

1
新的Appfabric 1.1具有读取和写入功能,可以保证缓存的持久性。 读取 - 如果缓存中不存在所请求的项目,则可以从后端存储加载数据,然后插入到缓存中。使用读取提供程序,缓存检测到缺少的项目并调用提供程序执行数据加载。然后将项目无缝返回到缓存客户端。
写入 - 同样,添加或更新缓存中的项目可以使用写入提供程序定期写入后端存储。这是异步发生的,并且由缓存定义的间隔时间。
您可以查看我的博客文章以获取实现详细信息http://blogs.msdn.com/b/prathul/archive/2011/12/06/appfabric-cache-read-from-amp-write-to-database-read-through-write-behind.aspx

谢谢,我将其标记为已接受,因为我决定使用AppFabric。这是最接近我所寻找的东西。 但是我仍然不确定如何将Web套接字引用保存到后备存储中。有什么想法吗? - Mattias Högnäs

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

0

如果您想要序列化类,那么您应该重新考虑类的结构。但是对于当前问题,如果您想要缓存对象并在应用程序池重启后保留它们,那么您应该考虑配置 HttpContext.Cache 使用 SQL Server 而不是进程内存。请查看以下链接:

ASP.NET 缓存概述

演练:使用 SQL Server 进行 ASP.NET 输出缓存

请注意,使用技术/平台特定资源的包装器是一个好习惯。例如,最好使用一个 CacheWrapper 类,该类在内部访问 HttpContext.Cache。这样,您可以轻松地更改包装器类的实现以使用另一个缓存存储(如果需要)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接