【吊打面试官系列】Redis篇 -Redis 回收进程如何工作的?

大家好,我是锋哥。今天分享关于 【Redis 回收进程如何工作的?】面试题,希望对大家有帮助;

​Redis 回收进程如何工作的?

一个客户端运行了新的命令,添加了新的数据。Redi 检查内存使用情况,如 果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

Redis的内存回收进程是一个单独的线程或进程,被称为“内存回收进程”(memory reclaiming thread/process)。这个进程的主要工作包括:

  1. 过期键的检测:Redis首先在时间上进行判断,对那些已过期但是尚未被删除的 keys 进行标记,这样它们就可以在之后被立即释放并回收所占用的内存。

  2. LRU算法的运用:Redis内存回收进程还检查那些没有被过期,但仍然占用大量内存的键。如果所选键比快满了,Redis 就选择其中最早要删除的几个键,并释放它们所占用的空间。

  3. 手动回收内存:除了定期回收外,Redis 还支持手动释放 key VALUE 占用内存的方法,例如通过向 Redis 发送一个 flushall 命令或使用“shutdown”命令断开连接的方式来清除所有数据。

  4. 内存分配策略:Redis使用内存池(memory pool)来分配空间,并且它针对不同对象的大小,提供了不同的内存分配策略。

  5. 避免内存溢出:如果内存占满,Redis服务器将停止工作,同时遇到读写请求将返回错误信息OOM(Out of Memory)。为了预防这种情况,Redis 为内存回收提供了三个命令:基于过期时间取消 key、基于 LRU (Least Recently Used)算法淘汰长时间未使用的键/值对、数据库压缩。

总结来说,Redis 的内存管理主要依靠两个进程:内存回收进程和AOF持久化进程(如果打开)。所有键值都保存在内存中,如果内存满了,Redis将停止工作,同时遇到读写请求将返回错误信息OOM(OutOfMemory)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值