Redis 数据删除策略

Redis采用定时删除、惰性删除和定期删除策略管理过期数据,平衡内存和CPU使用。内存淘汰策略包括LRU、LFU等,针对全库和易过期数据进行选择性淘汰。当内存不足时,Redis可能执行逐出算法,但并非总能清理足够空间,可能报OOM错误。

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

Redis 数据删除策略

Redis-Logo

1、Redis数据特性

Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,有三种状态:
XX:具有时效性的数据;
-1:永久有效的数据;
-2:已经过期的数据 或 被删除的数据 或 未定义的数据;

2、时效数据存储结构:

时效数据存储结构图

3、数据删除的策略:

  • 定时删除
  • 惰性删除
  • 定期删除

4、数据删除策略的目标:

在内存中占用与CPU占用 之间寻找一种平衡,顾此失彼都会造成Redis性能的下降,甚至引发服务器宕机或者内存泄漏.

4.1、 定时删除: 用时间换空间

创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务执行立即对键key的删除操作.

优点:节约内存,到时候就删除,快速释放掉不必要的内存占用;
缺点: CPU压力很大,无落CPU此时负载多高,均占用CPU,会影响Redis服务器相应时间和指令吞吐量;

4.2、惰性删除: 用空间换时间

在数据到达过期时间时,不做处理.当下次访问时,若数据过期则删除,返回不存在,否则返回数据;

优点: 节约CPU性能,发现必须删除的时候才删除;
缺点: 内存压力大,出现长期占用内存的数据;

4.3、定期删除: 随机抽查,重点抽查

周期性的轮训Redis中设置过期时效的数据,随机抽取数据,若过期则删除;

5、Redis内存淘汰策略

5.1、检测全库数据:(所有数据集server.db[i].dict)

  • allkeys-lru: 从所有的数据中挑选最近最少使用的key数据淘汰;
  • allkeys-random:从所有的数据中随机的挑选数据进行淘汰;
  • allkeys-lfu: 从所有数据中挑选不经常使用的数据进行淘汰;

5.2、检测容易失去的数据:(可能会过期的数据集server.db[i].expires)

  • volatile-lru: 从已设置过期时间的数据中挑选最近最少使用的数据淘汰;
  • volatile-random: 从已设置过期时间的数据中,任意挑选数据淘汰;
  • volatile-ttl: 从设置过期时间的数据中挑选即将过期的数据进行淘汰;
  • volatile-lfu: 从已设置过期时间的数据中挑选不经常使用的数据进行淘汰;

5.3、放弃数据驱逐:

  • no-eviction: 禁止淘汰数据,内存不足时,报出错误;(redis4.0中默认策略)

6、逐出算法:

该算法是在Redis使用内存存储前,通常会调用freeMemoryIfNeeded()检测内存是否充足,若内存不满足新加入数据的最低内存要求,Redis要临时删除一些数据作为当前指令清理存储空间.清除数据的策略即为逐出策略.
**注:**逐出过程不是100%清理足够的内存,而是反复尝试,若处理完依旧无法满足,则报出错误:

(error)OOM command not allowed when used memory>'maxmemory'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值