大家好,我是锋哥。今天分享关于 【Redis 回收进程如何工作的?】面试题,希望对大家有帮助;
Redis 回收进程如何工作的?
Redis的内存回收进程是一个单独的线程或进程,被称为“内存回收进程”(memory reclaiming thread/process)。这个进程的主要工作包括:
-
过期键的检测:Redis首先在时间上进行判断,对那些已过期但是尚未被删除的 keys 进行标记,这样它们就可以在之后被立即释放并回收所占用的内存。
-
LRU算法的运用:Redis内存回收进程还检查那些没有被过期,但仍然占用大量内存的键。如果所选键比快满了,Redis 就选择其中最早要删除的几个键,并释放它们所占用的空间。
-
手动回收内存:除了定期回收外,Redis 还支持手动释放 key VALUE 占用内存的方法,例如通过向 Redis 发送一个 flushall 命令或使用“shutdown”命令断开连接的方式来清除所有数据。
-
内存分配策略:Redis使用内存池(memory pool)来分配空间,并且它针对不同对象的大小,提供了不同的内存分配策略。
-
避免内存溢出:如果内存占满,Redis服务器将停止工作,同时遇到读写请求将返回错误信息OOM(Out of Memory)。为了预防这种情况,Redis 为内存回收提供了三个命令:基于过期时间取消 key、基于 LRU (Least Recently Used)算法淘汰长时间未使用的键/值对、数据库压缩。
总结来说,Redis 的内存管理主要依靠两个进程:内存回收进程和AOF持久化进程(如果打开)。所有键值都保存在内存中,如果内存满了,Redis将停止工作,同时遇到读写请求将返回错误信息OOM(OutOfMemory)。