首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Redis的NHibernate二级缓存与仅使用Redis的缓存

使用Redis的NHibernate二级缓存与仅使用Redis的缓存
EN

Stack Overflow用户
提问于 2013-09-24 17:46:37
回答 1查看 3.5K关注 0票数 4

我的场景是我更喜欢像Server这样的关系数据库存储系统,因为我需要处理复杂的查询。

然后,因为一些计算最好是加班加点,只需将结果存储到类似Redis或者更传统的NoSQL解决方案中。

这就是我所想的:NHibernate上的第二级缓存发生了什么?

我做了一个非常小的研究,我发现有一个Redis二级缓存提供者,现在我感到“困惑”。

我的意思是,如果我使用NHibernate的二级缓存,大多数对象访问应该非常快,因为它不应该是数据库往返,因此大多数访问对象将从内存中的Redis存储中检索。

为什么我要考虑这个而不是直接使用Redis?因为我需要解决方案域中的实际原子事务。

好吧,问题?

依赖于NHibernate的二级缓存Redis提供程序,这是一个好主意,以获得最好的关系和无模式世界?

你的建议是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-25 10:59:29

我认为有两件事可以概括你的观点:

  1. 使用redis作为NHB之上的二级缓存。这是非常有意义的,因为SLC存储分离的对象字段,而redis是关键/值存储。我记得,SLC包含标量查询或映射和获取对象的结果,但重要的是,数据是从执行的查询中获取(缓存)的。 如果以这种方式使用redis,则所有缓存的值都必须来自NHB查询。这给您带来了某种事务的原子性,您是如何描述的,但据我所知,当SCL从未提交的事务返回陈旧数据或数据时,我们发现了一些but。 注意,这种方法说有人(NHB)仍然需要以某种方式保证RDBMS和Redis之间的业务事务,这并不简单和错误。 还请注意,SLC本身并不是令人难以置信的快速模式。由于SLC包含对象字段而不是对象本身,所以每次命中都会导致新的对象创建。因此,所发生的事情是从Redis中获取数据,而不是从执行的SQL查询中获得结果集。因此,当您使用准备好的语句,而RDBMS通常为您进行缓存时,您会发现这不会给您带来很大的性能改进。
  2. 作为一个独立的商业商店。完全自主地管理数据,就可以在本机(C#)代码中进行计算(与SQL或映射对象相反)。您需要保证新的数据和一些事务处理方法。

我会选什么?分开的红宝石。为什么?

  1. 第二级缓存和映射将一些契约作为查询或映射对象产生的内容。你不能独自管理或使用Redis。尤其是您的缓存数据耦合/紧密地连接到这些查询,而不是一些API (接口)和某种服务(就像我设计的那样)。
  2. 您可以在自己的代码中计算数据。
  3. SLC方法对我来说似乎很麻烦,而且常常很难找到这些bug。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18988529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档