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

使用Spring禁用redis缓存,Redision客户端-无Spring Boot

楚墨一
2023-03-14

我们需要根据是否配置了redis主机来启用/禁用缓存。我添加了以下3个bean配置。这是禁用的正确方法吗?启动后,我仍然看到缓存解析程序错误-“没有指定缓存解析程序,也没有找到CacheManager类型的bean。注册CacheManager bean或从配置中删除@EnableCaching注释”

    @Bean(destroyMethod="shutdown")
    @ConditionalOnProperty(prefix = "spring", name = "redis.host")
    public RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }

    @ConditionalOnBean(RedissonClient.class)
    @Bean
    public RedissonSpringCacheManager cacheManager(RedissonClient redissonClient) {
        Map<String, CacheConfig> config = new HashMap<>();
        // create "testMap" spring cache with ttl = 24 minutes and maxIdleTime = 12 minutes
        config.put("testMap", new CacheConfig(60*60*1000, 12*60*1000));
        return new RedissonSpringCacheManager(redissonClient, config);
    }

    @Bean
    @ConditionalOnBean(RedissonSpringCacheManager.class)
    @Primary
    public CompositeCacheManager compositeCacheManager(RedissonSpringCacheManager cacheManager) {
        logger.info("composite cache-manager init...");
        CompositeCacheManager compositeCacheManager = new CompositeCacheManager(cacheManager);
        compositeCacheManager.setFallbackToNoOpCache(true);
        return compositeCacheManager;
    }

谢谢你的帮助!

共有1个答案

南宫正阳
2023-03-14

您已经使用@EnableCaching注释启用了缓存,该注释将始终从相关的缓存管理器bean中查找。workaound正在删除@EnableCaching并实现您自己的cachingconfiguer,并将此bean标记为基于条件或配置文件的。

 类似资料:
  • 问题内容: 我是Redis的新手,并试图找出一种简单的方法将Redis用作C#应用程序的本地缓存。我已经从https://github.com/MSOpenTech/redis/releases下载并运行redis服务器 我可以成功存储键值并按以下方式检索它: 我想限制Redis在我的服务器上使用的内存量,我也想让Redis在内存填满时自动清除值。我尝试了maxmemory命令,但是在redus-

  • 在定义缓存时,不管提供程序是什么(对于intance Caffeine来说),我们通常将它们定义为bean,然后通过Spring Boot的自动配置将bean解析为。例如 不幸的是,这在Redis中是不可能的,因为它的实现不是公共的。 我们喜欢做的另一件事是定义bean,例如使用咖啡因 因此,目前唯一的解决方案是创建我们自己的RedisCacheManager,但这会阻止的使用。 所以这是我的问题

  • 我的客户端代码看起来是这样的(Cache只是一个没有属性的可序列化类): 我现在的问题是:使用这段代码,我得到了一个ClassNotFoundError,它试图将东西放到复制的映射或常规映射中,但在专用的Hazelcast服务器(成员)中,而不是在客户端。 每当我从客户端配置中删除近缓存配置时,所有的工作都非常完美,当然,除了我没有近缓存。 我错过了什么?

  • 我已经使用jedis将redis集成到我的spring web应用程序中(redis支持AWS弹性缓存)。在单节点上,它可以很好地使用单绝地连接工厂进行读写。 我现在需要将它扩展到一个集群,以便写入主节点并从次节点读取。也就是说,如果一个下降,那么复制将由AWS自动发生,在这种情况下,我将连接的主机名将被更改。 如何读取进入图片的新节点? 我如何从spring容器(我指的是XML文件)连接到它?

  • 1. 前言 在MyBatis 缓存一节中,我们介绍了 MyBatis 的多级缓存。MyBatis 的二级缓存可在多个会话中共享缓存,但是这也加大了内存的使用空间,如果二级缓存空间占有量过多势必会导致程序运行空间的不足,因此我们需要将二级缓存转移到专业的缓存服务器上。 Redis 是一个高性能的 kv 数据库,被广泛的使用在缓存服务上,MyBatis 项目开发者提供了 Redis 缓存的实现。本小节

  • 我有一个运行在一个系统上的java服务器,它从数据库加载数据并缓存到java缓存。我有其他的C++客户端,它正在运行使用相同的Java配置。两者都在不同的PC上运行。我希望对java和C++客户机都使用一个公共缓存,也就是说,如果我使用java加载缓存,然后我希望通过C++客户机查询这个缓存数据。我只是尝试这样设置组播选项。 如果两个客户机都在同一个系统上工作,它的工作是好的。但是当两者都在不同的