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