春天 – Redis与番石榴缓存

前端之家收集整理的这篇文章主要介绍了春天 – Redis与番石榴缓存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个代码,我已经实现了缓存机制.
以前它是基于番石榴的缓存,现在我正在转向Redis考虑集中缓存的需求.

但是我担心它的性能,因为与guave相比,我看到redis的性能极低.

我测量了api的性能,它从缓存中获取一个类对象
在番石榴的情况下,它是5毫秒,而在雷迪斯,它是200毫秒.
这是负载测试情况下的平均响应,如果单个请求响应没有太大差异.
我已经使用缓存抽象实现了Spring数据Redis.

以下是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

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

我的主要问题是,与Guava相比,导致此问题的配置还是Redis的性能非常低?
可以通过更多的配置调整redis性能与番石榴的性能进行比较吗?
请建议.

最佳答案
免责声明:我不是使用Guava或Redis的专家,尽管我已经同时使用了它们.

明显的绩效损失是显而易见的

对于初学者来说,在我看来,从Guava切换到Redis时遇到性能下降是完全正常的.

主要是因为:

> Guava为应用程序运行的JVM提供内存和本地缓存.因此,您的应用程序可以轻松查询,而无需借助任何进程间通信.
> Redis是一个独立的键值存储应用程序,在自己的进程中运行.因此,您必须以某种方式与其进行通信以建立连接并发送请求.

所以,即使你在同一台机器上,即使Redis固有的性能优于Guava的缓存(事实上可能就是这样,但对于一般情况而言),你肯定会看到性能上的打击.

可能的改进

话虽这么说,您可以通过配置和架构选择来改善您的性能

>确保使用本地IP连接到Redis.这有助于避免在尝试建立连接时解析任何地址.
>确保通过尽可能轻量级的协议连接到Redis.正如我假设您使用的是本地Redis服务器,并且您遵守上一点,您将不需要任何铃声和口哨声,安全协议等…
>任何其他可能适用于您的方案的常见Redis配置调整.

猜你在找的Spring相关文章