简而言之,.Net生态系统中存在哪些SIMPLE内存缓存?
我在寻找的是:
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
我已经研究过这些选项:
我正在使用Google Protocol Buffers(protobuf-net),因此我对每个项目的内存占用量进行了相对准确的估算。我正在缓存从数据库访问返回的数据,但我不想使用正式的ORM(我实际上正在使用PetaPoco,但这不是重点)。
在这个阶段,我计划实现我自己的缓存,使用双链表和哈希(字典)来提供一旦达到缓存限制就从缓存中删除最近最少使用的项。但是,在我推出自己的选项之前,我想查看是否有人知道任何合适的选项。
那你最后用缓存做了什么?
我有一个我正在研究的通用缓存原型,除了缓存限制是由容量(项目数)而不是内存使用量之外,它实际上是你想要的,但它有一个你可能会欣赏的额外功能:本地持久性。
缓存由图层构成,您可以在其中拥有单个图层:内存,双层:内存+本地持久性,或三层:内存+本地持久性+网络共享。您可以根据需要使用任何图层组合。虽然设计为.net远程服务的网络共享可以安装在网络上的任何计算机上,并且可由客户端缓存自行发现,但功能尚不完善。
缓存是通过接口ICache <TKey,TValue>访问的泛型类。本地持久高速缓存使用SQL Express Compact 4创建动态数据库和表,其中包含TKey的所有字段,时间戳和序列化为Image列的TValue。在多层配置的情况下,当您在顶级缓存上使用方法TryGetValue(TKey键,输出TValue值)时,如果第一层(内存缓存)没有该项,则在内部检查下一层(本地持久的),然后是下一个...直到没有更多的缓存可用于提供数据。当内存缓存丢弃一个项目时,它让下一个缓存机会将项目添加到其层中,因此在持久缓存的情况下,数据被存储以供将来请求使用。
缓存具有使用定义的保留时间参数(即,内存缓存为几分钟,本地持久缓存为30天)和容量。
如果有人感兴趣,我可以将其发布为公共域代码。
AppFabric for Windows Server中的缓存功能如何?试试看 ! http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx和http://msdn.microsoft.com/en-us/library/hh334364.aspx
但是,如果市场上没有提供所需行为的产品,则必须使用Design Patterns实现自己的自定义缓存层。
检查MemoryCache和CodeProject上关于使用MemoryCache的这篇文章。