问题标签 [second-level-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1679 浏览

hibernate - 什么时候去缓存/二级缓存?有具体的实际场景吗?

我正在开发一个属于汽车制造商的基于 Web 的应用程序,该应用程序是在 Spring-Hibernate 中使用 MS SQL Server 2005 数据库开发的。

通过这个应用程序,最终用户可以通过基于 Web 的界面请求创建汽车、公共汽车、卡车等。当用户登录时,会显示一个 HTML 表单,用于捕获车辆的技术规格,例如,如果有人想请求汽车,他可以指定发动机品牌/型号、轮胎、底盘详细信息等。总共有 100 个表单元素在创建车辆请求屏幕上,其中 30% 是用于显示选项的下拉菜单(选择框)(即允许用户选择其中之一)。这些 SELECT 框从存储在数据库中的值(主数据)中填充。通过在后端运行存储过程,此主数据每周至少更改一次。

该应用程序在全球约有 10,000 名用户,我们预计每天最多有 5000 次新车请求,即显示 5000 次“创建车辆”表单。

我的问题是,我是否需要使用二级缓存选项来存储从主数据显示的表单字段的值?

由于这些值是从一组每周仅更改一次的主表中显示的,因此我认为缓存主数据将有助于提高性能,但我不太确定,因为我还没有将我的应用程序移动到生产以查看真实性能并查看我是否真的需要缓存。

如果我使用缓存,我可能需要花一两个星期来弄清楚如何配置它,我不想花一两个星期看不到任何真正的好处?

在这方面需要专家帮助。此外,如果有人可以分享实际需要缓存的实际场景,那将有很大帮助。

0 投票
2 回答
21563 浏览

hibernate - 如何使用 Hibernate 3.5.2 配置 JPA 2.0 以使用 EHCache 作为 2 级缓存和查询缓存?

我找到了一些说明如何配置纯休眠以使用 EHCache。但我找不到任何说明如何配置 JPA2.0 EntityManager 以使用缓存。Hibernate 3.5.2 是我的 JPA2.0 提供者。

编辑//@Cacheable(true)对于实体来说足够了吗?或者我应该使用@org.hibernate.annotations.Cache来配置实体?

0 投票
1 回答
1389 浏览

java - hibernate二级缓存中缓存了哪些类

有没有办法让我找出哪些类(即不同类型的实例)缓存在休眠二级缓存中。

0 投票
2 回答
1303 浏览

java - 有没有办法查看 L2 休眠缓存?

我的任务是在我的项目中附加 Oracle Coherence(它是缓存软件)。使用它的一种方法是 Level2 Hibernate 缓存。我想看看休眠何时从二级缓存中获取结果。我怎样才能做到这一点?两种方式都很好:如果可能的话,某种类型的监听器,或者直接访问 Cache 对象。提前致谢。

0 投票
1 回答
217 浏览

asp.net-mvc - 使用 SharedCache 和 Nhibernate 设置缓存实体的过期时间

我有一个 MVC webapp,我现在正在整合。第二个应用程序将数据发布到我的 webapp 从中读取的数据库。

我正在使用 SharedCache 作为我的 NHibernate 的缓存提供程序,并且我希望为我的实体分配“过期时间”(这样我可以保证数据的新鲜度) - 并且知道某些实体很少更新而其他实体会定期更新,它会具有不同过期时间的不同缓存区域是理想的。

我在网上看到了很多关于如何使用 SysCache 执行此操作的示例,但找不到 SharedCache 的任何示例。

提前致谢。

0 投票
3 回答
1577 浏览

nhibernate - NHibernate 使用 SysCache 跨会话缓存实体

我正在开发一个 Web 应用程序,我想缓存以在 Web 请求中持续存在。我知道第一级缓存仅针对每个会话。我启用了二级缓存,这适用于查询。

但是,二级缓存似乎不适用于“获取”实体......因此,应用程序所做的大部分数据库工作都没有跨 Web 请求进行缓存。

这是正常/理想的行为吗?我正在查看一个特定页面,该页面对数据库进行了多次往返,尽管每个查询都很快,但如果可以缓存实体,这些似乎是不必要的。

编辑

好的,所以我启用了二级缓存,并为查询工作。我似乎无法让它为实体工作。Cache.Is(c => c.ReadWrite())我正在测试的主要实体上有(流利的 nhibernate)。但是不,它仍然每次都会命中数据库。有任何想法吗?

编辑

我试过使用这样的交易:

我的映射是这样的(你可以看到我们有一个讨厌的模式):

但是,这似乎仍然没有从二级缓存中获取。

顺便说一句,我在网上看到很多例子,Cache.ReadWrite()但我只能看到Is缓存助手上的一个方法,所以我正在尝试Cache.Is(c => c.ReadWrite())——流畅的界面是否改变了?

0 投票
1 回答
1893 浏览

orm - 如何在 EntityManager (JPA) L1 或 L2 缓存大小中设置限制

如何设置 L1 或 L2 缓存大小限制。我担心增加缓存大小。一种方法是为缓存定义超时,但我想知道是否可以限制缓存大小?

RGDS 纳维德

0 投票
1 回答
675 浏览

hibernate - JPA/HIBERNATE - 对象实例是否仅按 id 进行索引?

可能这是一个基本问题,但在网络上的任何地方都找不到答案。

我正在尝试使用二级缓存(使用 ehcache),并且每次尝试加载它们时检查是否从数据库中检索了一些对象,唯一的区别是我不是通过 id 而是通过携带的属性获取它们一个 SEO 友好名称,用于在我正在工作的系统上创建 url。jpa/hibernate 是否能够仅通过 obj 的 id 从缓存中检索对象?有什么方法可以让它工作而不需要激活查询缓存?

0 投票
1 回答
914 浏览

performance - 使用二级缓存优化 hibernate/jpa 中的大型选择

我有一个用 JPA 表示的用户对象,它具有特定的子类型。例如,想想用户,然后是一个子类 Admin,以及另一个子类 Power User。

假设我有 10 万用户。我已经使用 Ehcache 成功实现了二级缓存,以提高性能并验证它是否有效。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache

我知道当您调用 load 方法时它确实有效(即,您从缓存中加载对象而不是调用 sql 查询)。我已经通过休眠级别的日志验证了这一点,并验证了它是否更快。

但是,我实际上想选择所有用户的一个子集......例如,假设我想计算有多少高级用户。

此外,我的用户有一个关联的 ZipCode 对象……ZipCode 对象也是二级缓存……我想要做的实际上是能够询问诸如……我在 New 中有多少高级用户约克州...

但是,我的问题是......我如何编写一个查询来执行此操作,该查询将访问二级缓存而不是数据库。请注意,我的二级缓存配置为读/写...因此,当新用户添加到系统中时,它们应该自动添加到缓存中...另外...请注意,我已经简要调查了查询缓存,但是我不确定它是否适用,因为这适用于多次运行的查询……我的问题更多的是……数据无论如何都应该在二级缓存中,所以我该怎么做才能使当我编写查询时,数据库没有受到影响。

干杯,布赖恩

0 投票
2 回答
737 浏览

nhibernate - 用于 Newb 的 Nhibernate 二级缓存

我正试图了解 Fluent NHibernate 中的二级缓存。到目前为止,我已经完成了以下工作:

  1. 添加了对缓存 dll 的引用
  2. 在我创建会话工厂时添加了以下内容:

    c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");

    c.SetProperty("cache.use_second_level_cache", "true");

    c.SetProperty("cache.use_query_cache", "true");

  3. 添加了 Cache.ReadWrite(); 针对我希望缓存在 ClassMap 文件中的所有实体,例如

    公共类 CountryMap : ClassMap { public CountryMap() { Table("Countries"); Id(x => x.CountryID); 地图(x => x.CountryName);缓存.ReadWrite(); } }

现在我假设每当我尝试获取一个在映射中具有 Cache.ReadWrite() 的实体时,它都会在会话工厂(单例)期间缓存它。但是,情况似乎并非如此,因为每个请求都会命中数据库。这是我有几个问题:

  • 会话上的 CacheMode 属性有什么作用?我的会话在 Web 请求期间持续。我应该在创建会话时设置它吗?如果是,我应该将它设置为什么?
  • 我在某处读到,除非进行提交,否则不会更新缓存。我只在数据库中插入/更新信息时提交数据。例如,如果我有一个包含国家/地区列表的简单页面,我会获取所有需要的数据,但不会提交数据,因为我不需要进行任何更改。这是否意味着这些数据不会被缓存?我确定我读错了,因为这意味着数据只有在添加到数据库后才会被缓存。

如果您能提供帮助,我将不胜感激。谢谢