Redis key过期但内存没有释放

1、过期时间被擦除导致key过期未释放内存

首先设置一个key的过期时间:set keya valuea EX 60

然后查看key的剩余时间:TTL keya

此时我们使用set重新设置key的值则会导致过期时间失效,所以在重新set时也需要设置过期时间

 2、key的过期删除策略导致不同情况下的内存未释放

一、惰性删除:在读/写操作key时,判断key是否过期,若key过期则删除该key。

二、定时删除:经过固定时长(存在默认值),Redis会定时删除部分过期的key。

当采用惰性删除策略时,若未主动读写过期的key,则key依然留存在内存中,导致内存的未释放。

当采用定时删除时,Redis只是淘汰了部分的过期key,可能会存在部分过期key未被删除的情况从而导致内存的占用。

引申没有设置过期时间的key,Redis是如何清理的:http://t.csdn.cn/TWfIk

 3、密集访问

处理器的性能有上限,当访问量过大,过多的过期键需要删除时,一定时间内处理掉的过期内容有限。(ps:在设置过期时间时,增加一定的随机策略,可以避免同一时间过期键的数量)。

4、持久化策略

开启了RDB快照或AOF日志,但频率设置较低,可能会导致过期键未能及时写入持久化文件,从而无法释放内存。

5、过于复杂的数据或大量的数据

部分数据结构内可能存储了大量的数据,比如hash,只有其中部分内容过期,遍历结构会花费一定时间导致不能及时删除。或者一次性要释放的内容过多。

6、内存空闲

过多的数据量占据太多内存,处理器在处理时也需要消耗内存资源,优先保证正常运行的情况下可能会导致过期键的检查删除延迟。

 7、解决过期键未释放的方法

 调整过期键检查频率:通过调整Redis配置文件中的hz参数,适当增加过期键的检查频率,确保过期键能够及时被发现和删除。

合理设置持久化策略:根据实际需求,选择合适的持久化策略(如RDB快照或AOF日志),并设置适当的频率,以确保过期键能够被写入持久化文件,避免内存资源浪费。

使用Redis集群:将数据分布到多个Redis节点中,通过横向扩展来增加处理能力,减轻单个节点的压力,提高过期键释放的效率。

适当增加内存:确保Redis服务器具有足够的内存资源,以容纳所有键和值,并提供足够的空间来处理过期键的释放。监控Redis服务器的内存使用情况,及时进行扩容或优化。

避免密集访问:尽量避免在短时间内对大量过期键进行密集访问。可以通过合理的数据设计和业务逻辑优化,减少过期键的集中出现,分散访问压力。

 使用手动删除机制:除了Redis的自动过期键删除机制外,可以在应用程序中使用手动删除机制。即,在键过期时,应用程序检测并主动删除过期键,以确保及时释放内存。

Redis过期键未释放可能由多种原因引起,包括内存压力、密集访问、持久化配置和复杂数据结构等。针对可能导致过期未释放的原因,通过合理调整Redis配置、增加内存资源、优化持久化策略、避免密集访问以及使用手动删除机制等方法,可以有效解决过期键未释放的问题,提高Redis的性能和稳定性。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raphael-laq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值