NHibernate二级缓存提供程序差异

NHibernate二级缓存提供程序差异,nhibernate,caching,Nhibernate,Caching,我已经使用NHibernate一段时间了,我仍然想知道二级缓存提供程序之间的区别是什么 有些表现更好还是更差 什么是流行的,为什么 为了清楚起见,我说的是: NHibernate.Caches.MemCache NHibernate.Caches.popularity NHibernate.Caches.SharedCache NHibernate.Caches.SysCache NHibernate.Caches.SysCache2 NHibernate.Caches.Velocity

我已经使用NHibernate一段时间了,我仍然想知道二级缓存提供程序之间的区别是什么

  • 有些表现更好还是更差
  • 什么是流行的,为什么
为了清楚起见,我说的是:

  • NHibernate.Caches.MemCache
  • NHibernate.Caches.popularity
  • NHibernate.Caches.SharedCache
  • NHibernate.Caches.SysCache
  • NHibernate.Caches.SysCache2
  • NHibernate.Caches.Velocity
我相信还有其他人


感谢

比较这些缓存提供程序实际上可以归结为比较memcached与流行率与速度等,而这实际上与NHibernate无关

以下是选择其中一个的一些原因(并非完整列表):

如果您希望保持简单,并且不在服务器场中运行应用程序,您可能需要使用SysCache/possibility,它在proc中运行。如果使用MS SQL Server,请使用SysCache2

如果您需要跨多个缓存专用服务器的大型缓存,您可能希望使用memcached,它可以在Linux上运行,从而避免许可成本

如果您的应用程序在Azure上运行或已经使用AppFabric,则可能需要使用Velocity


就我个人而言,我更喜欢在比数据访问更高的级别上进行缓存(只有在真正必要的情况下),以便使缓存比实体更具意图和意义,并在缓存中包含更多的数据访问。在设计合理的系统中,使用装饰器或代理可以很容易地使缓存透明。

我不同意第一段。有些场景如果没有缓存,无论您如何编写,都会非常糟糕。另一种选择通常是某种形式的手动缓存,这对体系结构来说通常更糟糕。@Diego:当然,这是一个有争议的观点。我更喜欢在更高的层次上进行“手动缓存”,而不是在缓存中进行数据访问(例如,繁重的处理/web服务)。这种手动缓存99%的时间是作为装饰程序或代理使用的,因此不会给体系结构增加太多开销。@Diego:BTW这将是一篇博客文章“NH二级缓存:它是什么以及何时/为什么/如何应用它”的一个很好的主题已添加到博客的待办事项列表中;-)关于更高级别的缓存,这取决于您正在缓存的内容,IMO。缓存响应或高级图当然是有意义的,但实体是有问题的。很好的总结,我同意您的观点,即不依赖缓存。这里的所有开发人员都需要在关闭第二级缓存的情况下进行开发。我们没有服务器场,但将来可能会运行MS SQL Server,因此我将查看这3个选项,看看哪一个适合我。谢谢