首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于相同数量的密钥,Redis会消耗更多内存超时

对于相同数量的密钥,Redis会消耗更多内存超时
EN

Stack Overflow用户
提问于 2019-01-14 21:49:34
回答 1查看 695关注 0票数 2

背景:

我的服务在prod环境中的redis独立设置中缓存数据,使用带有@Cacheable注释的spring- data -redis RedisTemplate。我缓存了3分钟的数据,但是我发现我的redis内存在逐渐增加(这种观察持续了1-2周)。我怀疑我的redis密钥没有被驱逐,因为密钥的数量不断增加(这也可能是由于恒定的负载)。因此,我将我的服务从redis上断开了3分钟,并观察了redis的内存。所有的密钥都过期了,内存使用率下降。

然而,当我重新启动我的服务来缓存redis中的数据时,在1-2分钟内,我得到了与以前相同数量的键(这是预期的,因为我的服务负载很高),但redis的内存使用量要少得多。

下面是redis使用之前、未使用redis期间以及重新将我的服务连接到缓存后的键数图表

下面是redis在上述场景中使用的内存图

正如您所看到的,对于相同数量的密钥,redis在长时间(1-2周)运行时会消耗非常高的内存。当我从redis断开服务以清空所有密钥,然后再次重新启动以使用redis缓存时,对于相同数量的密钥,我的内存使用率非常低。

什么可以解释这种行为?会不会是内存泄漏,对于连接,我有一个扩展CachingConfigurerSupport的类。连接bean和redis模板bean如下:

代码语言:javascript
复制
@Bean
public JedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory jedisConnFactory = new JedisConnectionFactory();
    jedisConnFactory.setUsePool(true);
    jedisConnFactory.setHostName(redisMasterUrl);
    return jedisConnFactory;

}

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory cf) {
    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
    redisTemplate.setConnectionFactory(cf);
    return redisTemplate;
}

在使用RedisTemplate时,我是否需要在任何地方关闭连接

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 22:15:08

我认为答案是,一旦Redis达到内存使用的峰值,它就永远不会释放它,直到restarted.This成为它使用的内存分配器的本质。

参考:https://groups.google.com/forum/#!topic/redis-db/ibhYDLT_n68

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54182801

复制
相关文章

相似问题

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