本文将给大家介绍redis相关知识,主要内容是分析redis过期键未释放原因,希望对需要的朋友有所帮助!让我们一起来看看吧!

背景:

1、redis 版本 5.0;

2、32G 的 redis 云服务器,内存持续上涨,过期键占用内存一直未释放。内存使用如下图:

58874b1a684d7333e131d62caff5d76.jpg

近期 redis 操作:把 2000 万永不过期键,随机分配 7-20 天的过期时间。

优化过程:

1、对阿里云 “离线全量 key 分析” 持续观察几天;

2、发现过期键的内存一直没有释放,从 2G 涨到 5G;

3、分析过期键内存不释放原因;

4、调整 redis 的 hz 参数,从 10 调 30,发现没有变化;

5、分析 redis 源码。

6、结论:redis 内存不释放原因:近期把 2000 万个键设置过期时间,导致垃圾回收命中率达不到 25%,不会重复轮循过期键。(源码文件:expire.c,activeExpireCycle 函数)。

47b2687251a85d418985036e44a0fa5.jpg

hz 说明【推荐学习:redis视频教程】

8a5c265e8dedcac98c1ef322955e4c6.jpg

7、最终处理方式:无需任何操作,随着过期键增多命中率提高,内存最终会释放(想加快把 “hz” 参数设置越大越快,但是会消耗更多 CPU 资源,可参数阿里云文档)。

91202524c7939ec345d11be8e9568a8.jpg

以上就是带你仔细分析redis过期键未释放原因!的详细内容,转载自php中文网

点赞(151) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部