在某些极端情况下,软件为了能正常运行会做一些保护性的措施,比如运行内存超过最大值之后的处理,以及键值过期之后的处理等,都属于此类问题,而专业而全面的回答这些问题恰好是一个工程师所具备的优秀品质。
我们本文的面试题是 Redis 内存用完之后会怎么?
典型回答
Redis 的内存用完指的是 Redis 的运行内存超过了 Redis 设置的最大内存,此值可以通过 Redis 的配置文件 redis.conf 进行设置,设置项为 maxmemory,我们可以使用 config get maxmemory
来查看设置的最大运行内存,如下所示:
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
当此值为 0 时,表示没有内存大小限制,直到耗尽机器中所有的内存为止,这是 Redis 服务器端在 64 位操作系统下的默认值。
小贴士:32 位操作系统,默认最大内存值为 3GB。
当 Redis 的内存用完之后就会触发 Redis 的内存淘汰策略,执行流程如下图所示: 最大内存的检测源码位于 server.c 中,核心代码如下:
int processCommand(client *c) {// 最大内存检测if (server.maxmemory && !server.lua_timedout) {int out_of_me