记一次redis内存没满发生key逐出的情况。
现象:
从监控上看,redis的内存使用率最大是80%,但是发生了key evicted
分析:
原因1、可能是阿里云监控没抓取到内存100%监控数据。
阿里控制台监控监控粒度是5秒。
内存使用率的计算方法。
used_memory_human/maxmemory
原因2、可能是link 内存占用比较大,虽然总内存超过了,maxmemory但是,link内存没统计到内存使用率里。
结合当时业务情况:没有大量数据写入, 有大key访问最大key 4M,hgetall访问。
所以判断,第二种可能性比较大。
解决方案:研发把大key 分散成小key。 比如原来存储了全国的数据,现在改成一个城市一个key。
redis 内存分析。
Redis总内存 = 链路内存(动态)+ 数据内存+ 管理内存(静态)
链路内存(动态)
主要包括Input Buff、Output Buff、JIT Overhead、Fake Lua Link、Lua执行缓存等,例如可执行INFO命令,通过返回结果的Clients中查看客户端缓存信息。
说明
Input buff与Output buff与每个客户端的连接有关,通常较小。当执行客户端Range类操作或大Key收发较慢时,Input buff与Output buff占用的内存会增大,从而影响数据区,甚至会造成内存溢出OOM(Out Of Memory)。
数据内存
用户数据区,即实际存储的Value信息,通常作为重点分析的对象。
管理内存(静态)
启动时较小且相对恒定,该区域由管理数据的Hash内存开销、Repl-buff与aof-buff的内存开销(约32 MB~64 MB)等构成。
说明
当Key数量特别多时(例如几亿个),会占用较大的内存。
redis内存解释
https://www.jianshu.com/p/2e75ce35261e
https://help.aliyun.com/zh/redis/user-guide/troubleshoot-the-high-memory-usage-of-an-apsaradb-for-redis-instance?spm=a2c4g.11186623.0.i42
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!