我正计划开发一个 Web 服务,我需要在内存缓存中使用,有哪些不同的缓存框架可用于 .NET,我使用了 Microsoft Enterprise Library Cache 块并评估了 NCache 用于分布式环境。
我的核心要求是缓存数据的可靠性,我正在考虑使用 Enterprise Lib Cache 块 DB 数据存储来实现持久性,以防工作进程重新启动。
有什么选择吗??
您可以查看GigaSpaces XAP.NET,它是一个完全分布式的内存数据网格中的事务,可以用作许多其他东西的缓存。它也可以是您的实际应用程序服务器,它允许您以分布式方式部署您的应用程序以及分布式缓存。它是高度可用、自我修复和自我管理的网格,您可以按需扩展和扩展。
免责声明 - 我为 GigaSpaces 工作。
您的缓存是一个易失性数据存储,您应该编写您的软件,以便它预期缓存不可用。例如
public DtoThing GetSomeData(string parameters)
{
if (<check cache for data> == <not there>)
return <get data from persistent store>
else
return <get data from cache>
}
如果您使用数据库作为缓存的后备存储,那么您基本上只是放弃了使用缓存的所有好处。当您说缓存需要可靠时,您是说更新需要保持一致还是数据需要始终在缓存中?如果是前者,很容易确保发生这种情况,只要您编写软件的方式是只有一个更新数据的路径,然后该路径可以在成功执行写入持久化后使缓存无效数据存储。
我有使用 Microsoft 的 Enterprise Library Cache Block 的经验,它对我来说效果很好。EntLib 配置有时可能有点冗长,但它可以完成工作。您正在寻找其他东西有什么特别的原因吗?
这类问题有很多潜在的解决方案。您提到了查看 NCache;如果您有时间,请查看 Oracle Coherence,这是 NCache 尝试复制的产品;-)
不过,我的建议是,除非您需要分布式缓存的好处,否则仅使用单进程内存缓存要简单得多。
万一你好奇,一个关于 NCache 起源的早期讨论:http ://www.theserverside.com/news/thread.tss?thread_id=43950