Mat*_*zer 4 .net c# nhibernate second-level-cache redis
我的情况是我更喜欢呆在像SQL Server这样的关系数据库存储系统中,因为我需要处理复杂的查询.
然后,因为一些计算会更好地加班,只是将结果存储到Redis或者更传统的NoSQL解决方案中.
这就是我想到的地方:NHibernate上的二级缓存发生了什么?.
我做了一个非常小的研究,我发现有一个Redis二级缓存提供商,现在我感到"困惑".
我的意思是,如果我使用NHibernate的二级缓存,大多数对象访问应该非常快,因为它应该没有数据库往返,因此大多数访问的对象将从内存中的Redis存储中检索.
为什么我要考虑这个而不是直接使用Redis?因为我需要在我的解决方案域中进行实际的原子事务处理.
是否依赖NHibernate的二级缓存Redis提供程序是一个好主意,以便获得最佳的关系和无模式世界?
你的建议是什么?
我看到两个不同的东西作为你的观点的摘要:
使用redis作为NHB上方的二级缓存.这非常有意义,因为SLC存储了对象的分隔字段,而redis是键/值存储.我记得,SLC包含标量查询或映射和获取对象的结果,但重要的是,数据是从执行的查询中获取(缓存)的.
恕我直言,如果您以这种方式使用redis,所有缓存的值必须来自NHB查询.这为您带来了某种事务原子性,您是如何描述的,但据我所知,当SCL从未提交的事务中返回陈旧数据或数据时,我们发现了一些错误.
请注意,这种方法表明某人(NHB)仍然需要以某种方式保证RDBMS和Redis之间的业务事务,这不是简单和错误.
另请注意,SLC本身并不是令人难以置信的快速模式.由于SLC包含对象字段而不是对象本身,因此每次命中都会产生新对象.所以会发生什么是从Redis获取数据而不是从执行的SQL查询中获取的结果集.因此,当您使用预准备语句并且RDBMS通常为您进行缓存时,您会发现这不会为您带来非常大的性能提升.
Redis是一家独立的商店.您完全依靠自己管理数据,可以在本机(C#)代码中进行计算(与SQL查询或映射对象相反).您需要保证新数据和一些交易方法.
我会选择什么?分开的redis.为什么?
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |