当前位置: 首页 > 知识库问答 >
问题:

如何用Spring Boot禁用Redis缓存?

印宏阔
2023-03-14

在定义缓存时,不管提供程序是什么(对于intance Caffeine来说),我们通常将它们定义为bean,然后通过Spring Boot的自动配置将bean解析SimpleCacheManager。例如

    @Bean
    public Cache myCache() {
        return new CaffeineCache(
                "my-cache",
                Caffeine.newBuilder()
                        .maximumSize(10)
                        .build());
    }

不幸的是,这在Redis中是不可能的,因为它的cache实现rediscache不是公共的。

我们喜欢做的另一件事是定义beanCachemanagerCustomizer ,例如使用咖啡因

    @Bean
    public CacheManagerCustomizer<CaffeineCacheManager> caffeineCacheManager() {
        return cacheManager -> cacheManager
                .setCaffeine(Caffeine.newBuilder()
                        .expireAfterWrite(1, TimeUnit.MINUTES));
    }

因此,目前唯一的解决方案是创建我们自己的RedisCacheManager,但这会阻止spring.cache.type:none的使用。

所以这是我的问题。用Spring Boot配置Redis缓存以便我们可以根据需要禁用它的最佳方式是什么?

共有1个答案

董哲
2023-03-14

我需要从spring.cache.type属性启用/禁用Redis自动配置。下面的代码解决了我的问题。对于那些只需更改一个属性就想禁用/启用redis的人来说,这可能会有所帮助,在我的例子中,它是spring.cache.type=redis。以下是主要的配置。

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
public class SpringBootApp extends SpringBootServletInitializer {

}
java prettyprint-override">@ConditionalOnProperty(prefix = "spring", name = "cache.type", havingValue = "redis")
@Configuration
@Import({ RedisAutoConfiguration.class })
public class ApplicationRedisConfig {

}

application.yaml启用自动配置

spring:
  cache:
    type: redis
  redis.host: redis

当redis不可用时,健康检查给出以下响应,这表明自动配置已经包括在内。

{
  "status": "DOWN",
  "details": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 486730272768,
        "free": 216405499904,
        "threshold": 10485760
      }
    },
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "hello": 1
      }
    },
    "elasticsearch": {
      "status": "UP"
    },
    "redis": {
      "status": "DOWN",
      "details": {
        "error": "org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to redis:6379"
      }
    }
  }
}
spring:
  cache:
    type: simple
  redis.host: redis
{
  "status": "UP",
  "details": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 486730272768,
        "free": 215928782848,
        "threshold": 10485760
      }
    },
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "hello": 1
      }
    },
    "elasticsearch": {
      "status": "UP"
    }
  }
}
 类似资料:
  • 问题内容: 我正在使用Rails 4.1,并设置共享Redis ElasticCache节点进行缓存。我尝试了https://github.com/redis- store/redis-store 和https://github.com/sorentwo/readthis,它们看起来很棒。 但是,如果Redis崩溃了怎么办?readthis和redis-store都完全失败。我宁愿网站没有缓存也慢

  • 问题内容: 使用时出现缓存问题。 我用来将数据插入MySQL数据库。然后,我有另一个应用程序处理此数据,并直接对其进行更新。 但是总是返回旧数据而不是更新数据。我认为已缓存了我的请求……所以……我应如何禁用它? 问题答案: 人们通常认为,除了在事务本地使用的常规SQLAlchemy身份映射之外,还存在“缓存”的作用,这是因为他们正在观察事务隔离的影响。默认情况下,SQLAlchemy的会话在事务模

  • 问题内容: 我正在尝试编写一个单元测试类,该类必须使用相同的查询以相同的测试方法两次从数据库中获取结果。但是,由于第二次启用了Hibernate缓存,因此它实际上并没有访问数据库,只是从缓存中获取结果。 有人可以回答如何禁用中的缓存。 但是它没有用。 问题答案: 有人可以回答如何在persistence.xml中禁用缓存。 默认情况下,第二级缓存和查询缓存是禁用的(除非您显式缓存它们,否则不会缓存

  • 本文向大家介绍SpringBoot使用Redis缓存的实现方法,包括了SpringBoot使用Redis缓存的实现方法的使用技巧和注意事项,需要的朋友参考一下 (1)pom.xml引入jar包,如下:   (2)修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下:   (3)application.properties中配置Redis连接信息,如下:   (4)新建Redis

  • 问题内容: 如何完全禁用RDB和AOF?我不在乎持久性,只希望它存在于内存中。 我已经注释掉了: 但这并没有帮助,我发现Redis仍尝试写入磁盘。我知道Redis希望写入磁盘,因为出现以下错误:“无法打开.rdb进行保存:权限被拒绝” 我不在乎该错误,因为我想完全禁用持久性。 问题答案: 如果要更改正在运行的Redis,请登录Redis,然后 禁用aof : 禁用rdb : 如果要在重新启动Red

  • 如何完全禁用RDB和AOF?我不在乎持久性,只希望它出现在内存中。 我已经注释了: 但这并没有起到任何作用,我看到Redis仍在尝试写入磁盘。我知道Redis想写入磁盘,因为我遇到了这样一个错误:“打开失败。用于保存的rdb:权限被拒绝” 我不在乎错误,因为我想完全禁用持久性。