java - 当 Redis 连接出现问题时,在 Hibernate 中熔断 L2 缓存

标签 java hibernate redis redisson hibernate-cache

我使用 redisson-hibernate 作为 Hibernate 二级缓存提供程序。如果redis服务器不可用,当应用程序正在运行时,整个应用程序就会宕机。我正在尝试找到一种方法来在这种情况下熔断二级缓存。

如果 redis 不可用,hibernate 应该像 L2 被禁用一样工作,并且应该有某种机制(或后续请求),应该在指定的 L2 量之后检查 redis 可用性,并重新启用 L2。已经有办法做到这一点了吗?

如果没有,如何建立这样的机制?我可以尝试运行一个quartz作业,它检查redis连接,通过修改应用程序配置来终止并重新启动应用程序。但这种方法很复杂,而且不太干净。请提出建议。

最佳答案

我尝试过您在 SPRING BOOT 应用程序中提到的场景,当我关闭 Redis 时,所有请求(HTTP)开始堆积。但是,当我重新启动 Redis 时,应用程序能够重新连接并照常处理。

Hibernate 和 Redis 连接根据“application.properties”文件中的可用配置加载。

spring.jpa.properties.hibernate.cache.auto_evict_collection_cache=false
spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.javax.cache.missing_cache_strategy=create
spring.jpa.properties.hibernate.cache.redisson.config=redisson.json
spring.jpa.properties.javax.persistence.sharedCache.mode=ENABLE_SELECTIVE

我在 Hibernate 或 Spring 文档中找不到任何可以自动检测 L2 何时关闭的 Hibernate/Spring JPA 参数。

我也热切地等待 Hibernate/Spring JPA 中的此类机制,因为这个场景是有效的测试用例,我们肯定会在 LOAD/PROD 环境中主要面对它。

关于java - 当 Redis 连接出现问题时,在 Hibernate 中熔断 L2 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676155/

相关文章:

java - 如何使用mockito模拟Spring Controller 测试中的字段?

java - 从 java 运行 python sklearn 分类器

java - Hibernate Criteria API 中两个属性之间的日期

javax.validation.Validation 多重实例化与重用单个 Validator 实例

ruby-on-rails - ActionCable:每个用户一个 channel

java - 为什么Java HashMap调整大小或重新哈希不能采用像Redis这样的渐进方法

java - Oracle SEQUENCE.NEXT VAL 表或 View 不存在

java - ArrayList不存储值

java - Hibernate Projections 不同记录

performance - 具有层次结构性能的 DocumentDB 与键值数据库