本文将给大家介绍redis相关知识,主要内容是分析redis过期键未释放原因,希望对需要的朋友有所帮助!让我们一起来看看吧!
背景:
1、redis 版本 5.0;
2、32G 的 redis 云服务器,内存持续上涨,过期键占用内存一直未释放。内存使用如下图:
近期 redis 操作:把 2000 万永不过期键,随机分配 7-20 天的过期时间。
优化过程:
1、对阿里云 “离线全量 key 分析” 持续观察几天;
2、发现过期键的内存一直没有释放,从 2G 涨到 5G;
3、分析过期键内存不释放原因;
4、调整 redis 的 hz 参数,从 10 调 30,发现没有变化;
5、分析 redis 源码。
6、结论:redis 内存不释放原因:近期把 2000 万个键设置过期时间,导致垃圾回收命中率达不到 25%,不会重复轮循过期键。(源码文件:expire.c,activeExpireCycle 函数)。
hz 说明【推荐学习:redis视频教程】
7、最终处理方式:无需任何操作,随着过期键增多命中率提高,内存最终会释放(想加快把 “hz” 参数设置越大越快,但是会消耗更多 CPU 资源,可参数阿里云文档)。
以上是带你仔细分析redis过期键未释放原因!的详细内容。更多信息请关注PHP中文网其他相关文章!