背景
最近在面试字节后端,面试官对 八股进行了深入的拷打,问了 Redis 的过期删除时间有什么机制,并延伸了当 redis 没有设置过期时间,且已知写redis知道redis写满,会发生什么?当时回答的是会启动换入换出操作,面试官好像不太满意。面试复盘实验一下,看看这种情况到底会发生什么。
Redis 安装(Linux环境)
step1:下载指定redis的版本包
1 | wget https://download.redis.io/releases/redis-4.0.9.tar.gz |
step2:解压到指定目录下
1 | tar -zvxf redis-6.0.5.tar.gz -C /home/zqy/桌面/redis |
step3:make 编译
1 | make |

step4:安装
1 | make PREFIX=/home/zqy/桌面/redis install |

step4:版本检查
1 | redis-cli --version |

step5:启动redis
1 | cd src |

Redis参数配置(maxmemory)
进入redis的安装目录,启动./redis-server后,执行./redis-cli客户端,查看内存使用情况
1 | ./redis-server |

maxmemory:0 并不是redis的最大内存大小是0字节,0表示redis的最大内存大小没有限制,当为其它正数 x时,表示redis的最大内存大小为 x 字节。
也可以通过命令获取maxmemory,
1 | config get maxmemory |

在使用 redis 前最好对 maxmemory 进行初始值的设置,否则 redis 可能持续占用内存,直到 系统 OOM 终止。使用 set 命令进行配置
1 | CONFIG SET maxmemory 1GB # 例如设置为 1GB |

注意:使用config set maxmemory 1GB 的方式只能是临时对 maxmemory 进行设置,要想让修改永久有效,需要修改 redis.conf 文件。
情景一:redis内存100MB,不设置过期时间,不设置缓存淘汰策略
查看redis的缓存策略
1 | CONFIG GET maxmemory-policy |
返回 “noeviction”表示,内存满时拒绝写入新数据

1 |