对于将在Web应用程序和富客户端应用程序中使用的.NET组件,似乎有两个明显的缓存选项:System.Web.Caching或Ent.库.缓存块.
你用什么?
为什么?
在Web应用程序之外使用是否安全?我看到了混合信息,但我认为答案可能并非如此.
针对1.0和1.1非Web应用程序使用的KB文章警告
2.0页面有一个注释表明它没关系:http://msdn.microsoft.com/en-us/library/system.web.caching.cache(VS.80).aspx
斯科特汉塞尔曼被这个概念所淹没
3.5页包含针对此类使用的警告
Rob Howard 鼓励在网络应用之外使用
我不希望使用它的一个亮点,SqlCacheDependency,但在.NET 3.5中添加CacheItemUpdateCallback似乎是一件非常好的事情.
其他块已在使用中,因此依赖性已存在
缓存持久性不是必需的; 重启时重新生成缓存是可以的
某些缓存项应始终可用,但应定期刷新.对于这些项目,在删除项目后获取回调不是很方便.看起来客户端必须只是睡眠和轮询,直到重新填充缓存项.
当您不需要分布式缓存时,有什么优缺点?
这些是我考虑用于缓存主题的项目:
MemCached Win32 Velocity .net缓存企业库缓存应用程序块
MemCached Win32:直到最近我才使用MemCached Win32.这类似于Web场(许多服务器为高可用性提供相同的内容),但它是一个缓存场.这意味着如果您没有更大的资源,最初可以在Web服务器上本地安装它.然后,当你走在路上时,你可以水平扩展(更多服务器)或垂直扩展(更多硬件).这是一个从原始MemCached移植到Windows上的产品.该产品已广泛用于非常高流量的站点. http://lineofthought.com/tools/memcached
Velocity:这是微软对MemCached等产品的回答.MemCached已经出现了很长一段时间,Velocity处于CTP模式.我必须说,从我到目前为止所读到的产品,一旦它出来,这个产品肯定会转过头来.但我不能让自己在没有业绩记录的CTP产品上运行大型生产项目.我已经开始玩它虽然它一旦获得动力MemCached甚至不会比较锁定在windows世界的那些! http://blogs.msdn.com/velocity/
.NET Cache: 没有理由对标准.NET Cache进行折扣.它内置并随时可以免费使用,无需(主要)设置.它通过提供在本地存储器,SINGLE状态服务器或集中式数据库中存储项目的机制来提供灵活性.Velocity步入的地方是当您需要多个状态服务器(内存中的缓存)并且不想使用慢速数据库来保存缓存时.
企业应用程序块:我远离所有企业应用程序块.它们是重型框架,比我通常需要的更多!只要你记得包装那些不是你自己的代码的东西并按照简单的编码规则,坚持使用这个方法的任何其他方法!(当然,我的观点是 - MySpace尽可能地利用企业应用程序块!)
你不必事先选择! 我通常创建一个缓存包装器,我在我的代码中与Get,Set,Exists,Remove,ListKeys等方法进行通信.然后,这指向可以指向MemCached,Velocity或.NET的基础缓存抽象级别.缓存.我使用StructureMap(或选择另一个IoC容器)来注入我想要用于给定环境的哪种形式的缓存.在我的本地开发盒中,我可能会在会话中使用.NET缓存.在制作中我通常使用MemCached Win 32.但不管它是如何设置的,你都可以轻松地交换周围的东西来尝试每个系统,看看什么最适合你.您只需要确保您的应用程序尽可能少地了解缓存内容的方式!一旦这个抽象层到位,你就可以做一些事情,例如为进出缓存的所有数据运行压缩算法(gzip),这样你就可以在缓存中存储10倍的数据量.- 透明.
如果你有兴趣,我会在我的书中介绍.NET Cache,MemCached Win32,StructureMap和相应的抽象!
ASP.NET 3.5社交网络(http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8 -1)Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net
更新 更改了使用memcached列出站点的链接.感谢大卫注意到它被打破了!