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

Redis vs Guava Cache

卢鸿彩
2023-03-14

我有一个代码,在其中我实现了缓存机制。以前是基于番石榴的缓存,现在考虑到集中式缓存的需求,我转向Redis。

 @Bean
 public RedisConnectionFactory redisConnectionFactory(@Value("${redis.host}") String redisHost,
            @Value("${redis.port}") Integer redisPort) {
        JedisConnectionFactory cf = new JedisConnectionFactory();
        cf.setHostName(redisHost);
        cf.setPort(redisPort);
        cf.setUsePool(true);
        JedisPoolConfig jedisPool = new JedisPoolConfig();
        jedisPool.setMaxTotal(500);
        cf.setPoolConfig(jedisPool);
        return cf;
    }

    @Bean(name = "redisTemplate")
    RedisTemplate<Object,Object> redisTemplate() {
        final RedisTemplate<Object,Object> template = new RedisTemplate<Object,Object>();
        template.setConnectionFactory(applicationContext.getBean(RedisConnectionFactory.class));
        return template;
    }

    @Bean
    public CacheManager cacheManager() {
        if(isRedisEnabled)
        {
            RedisTemplate<?,?> template = (RedisTemplate<?, ?>) applicationContext.getBean("redisTemplate");
            RedisCacheManager redisCacheManager = new PieRedisCacheManager(template);
            redisCacheManager.setUsePrefix(true);
           
                try
                {
                    template.getConnectionFactory().getConnection();
                }
                catch(Exception e)
                {
                    LOG.error("Unable to connect to redis Server ,closing application : "+e);
                    SpringApplication.exit(applicationContext);
                }
            return redisCacheManager;
        }
        else
        {
            GuavaCacheManager guavaCacheManager = new GuavaCacheManager();
            guavaCacheManager.setCacheBuilder(CacheBuilder.newBuilder());
            return guavaCacheManager;
        }
    }

除此之外,对于redis服务器配置,我已经尝试禁用所有持久性,因为我不需要它。但仍然表现不佳。

我的主要问题是,是配置导致了这种情况,还是Redis与Guava相比性能很低?
通过更多的配置优化,Redis的性能可以与Guava相比吗?
请建议。

共有1个答案

赖杰
2023-03-14

免责声明:我绝不是使用番石榴或红迪的专家,尽管我都用过。

首先,在我看来,当从番石榴切换到Redis时,性能下降是完全正常的。

主要是因为:

>

  • Guava为应用程序运行的JVM提供内存中的本地缓存。因此,您的应用程序可以很容易地进行查询,而无需借助任何进程间通信。

    Redis是一个单独的键值存储应用程序,运行在自己的进程中。因此,您必须以某种方式与它通信,以建立连接并发送请求。

    因此,即使您在同一台机器上,即使Redis的固有性能比Guava的缓存更好(老实说,一般情况下可能是这样),您也肯定会看到性能的提升。

    确保通过尽可能轻量级的协议连接到Redis。我假设您使用的是本地Redis服务器,并且您遵守前面的观点,您将不需要任何铃铛和哨子、安全协议等...

    任何其他通常的Redis配置调整可能适用于您的场景。

  •  类似资料:

    相关问答

    相关文章

    相关阅读