记一次redis内存没满发生key逐出的情况。

发布时间:2023年12月26日

现象
从监控上看,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

文章来源:https://blog.csdn.net/qq_35640866/article/details/135217591
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。