Ehcache是一个开源的,符合标准的基于Java的缓存,用于提高性能,卸载数据库和简化可伸缩性。
有人可以帮助通过 xml 使用 Spring JCacheCacheManager 创建 Ehcache 支持的 CacheManager 吗?我有这样的东西。不知道如何为 Ehcac 创建 javax.cache.CacheManager...
当 spring.factories 文件中没有 JCache 配置文件条目时,Spring Boot 如何自动配置 JCache?
我是 Spring Boot 项目的新手。 目前我正在开发一个带有 spring boot、Jcache 和 ehcache 实现的项目。 我试图了解 Spring Boot 如何自动配置缓存框架...
如果我们想要自定义 LRU LFU FIFO 之外的逐出策略,文档建议的方法是实现 Policy 接口,然后设置 MemoryStoreEvictionPolicy,如下所示: 管理器 = 新的 CacheManager(
使用 Spring 3.1、Mybatis 3 和 ehcache 缓存静态数据查找的最佳方式是什么?
我遵循了 mybatis-ecache 集成的建议,但我没有看到来自 EhCacheCache 的任何日志语句。 Spring 还集成了 eh-cache,乍一看似乎很容易导入...
我想有效地使用spring Cacheable。例如,我的梦想是像EhCache + Redis这样的多层一起使用。 https://medium.com/@estebanbett/using-ehcache-and-redis-as-multiple...
默认使用 hibernate/ehcache 缓存所有查询?
我们的应用程序处理只读数据,因此我们正在考虑在所有查询上使用 Hibernate 查询缓存功能(由 ehcache 实现)。 到目前为止,我们启用了二级缓存和查询缓存: ...
我使用 Spring + Ehcache 作为我的缓存层。 (通过代理) 我想知道您是否可以将“findAll”结果和“findById”结果缓存在同一缓存上,然后 CacheEvict 特定项目...
在 ehcache 3.8 版本中如何配置 EhCache 缓存以使用 LRU 逐出策略?
在3.8版本中,如何配置EhCache缓存以使用LRU驱逐策略? 我查看了 EvictionAdvisor,但它似乎只被最近插入的项目调用。所以我...
我们正在使用liferay门户并使用wildfly来部署它。我们在启动参数中使用以下属性。下面的启动参数会做什么? -Dnet.sf.ehcache.disabled=true
Redis、Aerospike、Couchbase 作为缓存用例?
我搜索了堆栈溢出和reddit,试图收集尽可能多的信息,并想就以下用例使用哪种缓存解决方案寻求建议(具有持久性......
我有一个后台作业,通过调用方法 ehcache.getQuiet(key) 从 Ehcache 中删除过期元素。然而,getQuiet(key)方法内部反序列化了缓存的对象,这...
来自 spring 文档: @Cacheable(值=“bookCache”,键=“isbn”) public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed) 如何指定 @Cachable 使用 isbn 和
SingletonEhCacheRegionFactory 在 Hibernate 6.1.7 中不可用
我们使用的是 hibernate 5.2.5,我们重写了 org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory 的 start 方法来执行一些初始化操作。这个班 我们在 persistence.xml 中配置...
如何使用Spring清除所有Hibernate缓存(ehcache)?
我正在使用二级缓存和查询缓存。 我可以知道如何以编程方式清除所有缓存吗?
我有一个跨两台机器复制的ehcache缓存。一旦两个对等点启动,对等点就会正确地找到彼此并进行复制。但是,如果第一个对等点先启动,并收到多个 el...
服务器启动后将Ehcache的缓存数据写入本地文件(磁盘),重启时应从文件(磁盘)中获取数据
我在服务器启动时创建一个缓存(服务器启动每次都需要10分钟)。目前我正在使用内存缓存(Ehcache)。现在我想建立一个机制,以便一旦数据是
有办法为 Spring Boot 3 配置 ehcache 2 吗?
我正在将一些遗留应用程序从 sb 2 (spring boot)迁移到 sb 3。应用程序正在使用 ehcache 和 xml 配置。在我的 cacheConfig 类中,我使用的是这样的东西: 导入 org.springframework...
如果 Guava 缓存绑定到 MeterRegistry,EhCache 指标不会出现在 Prometheus 中
隐式创建的EhCache缓存 我有一个 Spring 组件,它使用具有以下配置的文件 ehcache.xml 声明一些缓存: 隐式创建的EhCache缓存 我有一个 Spring 组件,它使用具有以下配置的文件 ehcache.xml 声明一些缓存: <?xml version="1.0" encoding="UTF-8"?> <eh:config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eh="http://www.ehcache.org/v3" xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.3.xsd"> <eh:cache alias="Cache1"> <eh:expiry> <eh:ttl unit="minutes">1</eh:ttl> </eh:expiry> <eh:resources> <eh:heap>10000</eh:heap> </eh:resources> </eh:cache> <!-- [...] --> </eh:config> 然后使用类似于以下内容: import org.springframework.cache.annotation.Cacheable; public class ThingDoer { @Cacheable("Cache1") public Integer doSomethingCached(int value) { return value + 3; } // ... } 这样,我可以看到 Prometheus 中出现不同的缓存指标: bash> 2>&1 curl -v --silent 'http://localhost:9000/actuator/prometheus' | grep cache_gets | sort cache_gets_total{cache="Cache1",cache_manager="cacheManager",hostname="localhost",name="Cache1",result="hit",} 0.0 cache_gets_total{cache="Cache1",cache_manager="cacheManager",hostname="localhost",name="Cache1",result="miss",} 0.0 cache_gets_total{cache="Cache2",cache_manager="cacheManager",hostname="localhost",name="Cache2",result="hit",} 0.0 cache_gets_total{cache="Cache2",cache_manager="cacheManager",hostname="localhost",name="Cache2",result="miss",} 0.0 cache_gets_total{cache="Cache3",cache_manager="cacheManager",hostname="localhost",name="Cache3",result="hit",} 0.0 cache_gets_total{cache="Cache3",cache_manager="cacheManager",hostname="localhost",name="Cache3",result="miss",} 0.0 [...] 我在文件中定义的所有缓存ehcache.xml都会自动公开它们的指标。 添加自制缓存 现在,我创建了一个自制的缓存,它在查询时执行复杂的操作,并为此使用了 com.google.common.cache.LoadingCache 接口,因为它的目的是替换此类缓存的另一个实例,并对其余代码进行尽可能少的更改。因此,我创建了一个自定义缓存,具有以下签名: import com.google.common.cache.AbstractLoadingCache; public class CustomCache extends AbstractLoadingCache<String, Object> { public CustomCache(Function<String, Object> valueLoader) { // ... } // ... } 它正确声明了一个 stats() 方法,该方法返回包含缓存统计信息的 com.google.common.cache.CacheStats。其构造函数的参数 valueLoader 用于在缓存中缺少新值时加载新值。 现在,这是如何使用此缓存的草图: import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.function.Function; public class CustomThingDoer { private final CustomCache customCache; public CustomThingDoer() { this.customCache = new CustomCache(this::loadNewObject); } public Optional<Object> doSomethingCached(String value) { try { return Optional.of(customCache.get(value)); } catch (ExecutionException e) { System.out.println("Something wrong happened"); return Optional.empty(); } } private Object loadNewObject(String value) { // Do something non-static } } 由于缓存旨在直接调用其方法的地方使用(即没有 @Cacheable 注释来使用此缓存,而是使用对 get 的调用),并且由于加载缺失值的方法取决于在定义它的类的实例上(即,所讨论的方法是提取数据库,其代码取决于CustomThingDoer实例中定义的内容),我希望将其手动注册到MeterRegistry中。 为此,我将 MeterRegistry 的 bean 传递给构造函数中的 CustomThingDoer,并执行以下操作: GuavaCacheMetrics.monitor(meterRegistry, this.customCache, "MyCustomCache"); 消失的缓存指标 但是现在这已经完成了,这就是我在 Prometheus 中获得的缓存指标: bash> 2>&1 curl -v --silent 'http://localhost:9000/actuator/prometheus' | grep cache_gets | sort cache_gets_total{cache="MyCustomCache",hostname="localhost",result="hit",} 0.0 cache_gets_total{cache="MyCustomCache",hostname="localhost",result="miss",} 0.0 现在,仅显示我的自定义缓存的指标。此外,字段 cache_manager 不存在。 我的怀疑是,由于我手动注册缓存,一些谓词被 automagic 破坏了,并且它永远不会将自动生成的 EhCache 缓存添加到 MeterRegistry。 我想要同时拥有自定义缓存的指标以及隐式创建的 EhCache 缓存的指标。如果可能的话,我希望不必更改所使用的接口(即`com.google.common.cache.LoadingCache),以便对代码(并且老实说,对单元测试)进行最少的更改。有人知道问题可能是什么,或者我可能有什么解决方案吗? 这似乎与 Micrometer 中的一个长期错误有关:https://github.com/micrometer-metrics/micrometer/issues/877。 它在几年前就被修复了,但它仍然有副作用,其中每个指标名称必须具有相同的标签键集,否则有些不被考虑在内。 https://github.com/micrometer-metrics/micrometer/issues/877#issuecomment-944894069