首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红宝石对番石榴咖啡

红宝石对番石榴咖啡
EN

Stack Overflow用户
提问于 2015-08-18 14:59:01
回答 1查看 9.5K关注 0票数 10

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

但我很担心它的表现,因为我看到与guave相比,redis的性能非常低。

我测量了一个api的性能,它从缓存中获取类对象--在Guava的情况下是5ms,而在Redis中是200 5ms。

这是在负载测试情况下的平均响应,在单个请求响应没有太大差异的情况下。

我用缓存抽象实现了Spring。

下面是示例Redis配置:

代码语言:javascript
复制
 @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与番石榴相比性能很差?

通过更多的配置,可以将redis性能与番石榴的性能进行比较吗?

请建议一下。

EN

回答 1

Stack Overflow用户

发布于 2015-08-31 15:43:44

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

明显的性能损失是显而易见的。

首先,在我看来,当你从番石榴切换到红宝石时,你会遇到性能下降,这是完全正常的。

主要是因为:

  • 番石榴提供内存中的缓存和应用程序运行的JVM的本地缓存。这样,您的应用程序就可以很容易地进行查询,而无需使用任何进程间的通信。
  • Redis是一个独立的键值存储应用程序,在它自己的进程中运行。因此,您必须以某种方式与其通信,以建立连接并发送请求。

因此,即使您在同一台机器上,并且即使Redis固有的性能优于番石榴的缓存(老实说,一般情况下可能是这样),您也肯定会看到性能上的成功。

可能的改进

尽管如此,您可能可以通过配置和体系结构选择来提高性能:

  • 确保使用本地IP连接到Redis。这将有助于在尝试建立连接时避免任何地址解析。
  • 确保通过尽可能轻量级的协议连接到Redis。正如我假设您使用的是本地Redis服务器,并且您遵守了前一点,您将不需要任何提示、安全协议等等.
  • 任何其他常见的Redis配置调整都可能适用于您的场景。
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32075954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档