Redis内存管理

Redis通过设置maxmemory参数控制内存上限,目的是用于缓存和防止超物理内存。内存回收采用惰性删除和定时任务删除机制处理过期键。当达到内存上限时,由maxmemory - policy参数控制溢出策略,如noeviction、volatile - lru等多种策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis通过控制内存上限和回收策略实现内存管理,使用maxmemory参数限制最大可用内存,限制内存的主要目的是:用于缓存场景,当超出内存上限时使用LRU等删除策略释放空间;防止所用内存超过服务器的物理内存。

内存回收的策略

1、删除过期键对象,由于内存中保存了大量的键,维护键精准的过期删除机制会导致消耗大量的CPU,对于单线程的Redis来说成本过高,因此,Redis采用惰性删除和定时任务删除机制来实现过期键的内存回收。

1.1、惰性删除:惰性删除用于当client端读取到带有超时属性的键时,如果已经超过键设置的过期时间,会执行删除操作并返回空,该策略是出于节省CPU成本考虑,不需要单独维护TTL链表来处理过期键的删除。该方式存在内存泄漏的可能,当过期键一直没有访问将无法得到及时删除,从而导致内存不能及时释放。

1.2、定时任务删除:Redis内部维护一个定时任务,默认每秒运行10次,定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例,使用快慢两种速率模式回收键。

内存溢出控制策略

当Redis所用内存达到maxmemory上限时会触发相应的溢出控制策略,策略由maxmemory-policy参数控制,可以通过config set maxmemory-policy {policy} 动态设置。

1、noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返回client端OOM错误信息,此时Redis只响应读操作;

2、volatile-lru:根据LRU算法删除设置了超时属性的键,直到释放足够空间为止,如果没有可删除的键对象,回退到noeviction策略;

3、allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时时间,直到释放足够的内存空间为止;

4、allkeys-random:随机删除所有键,直到释放足够的内存空间为止;

5、volatile-random:随机删除过期键,直到释放足够的内存空间为止;

6、volatile-ttl:根据键对象的ttl属性,删除最近将要过期的数据,如果没有,回退到noeviction策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值