文章探讨了阿里云 Redis 命中率监控指标在版本升级后出现的异常。用户发现,当 5 秒内 Redis 没有 QPS 时,命中率被计算为 0%,而根据公式计算应远高于此。阿里云解释称,这是因为监控的最小周期为 5 秒,若此区间内无 QPS,则命中率为 0。此逻辑导致监控阈值难以设定,正常业务场景下命中率波动剧烈,无法有效报警。文章指出,这种计算方式与用户预期存在偏差,给监控配置带来了困扰。
🎯 **Redis 命中率计算逻辑变更**: 阿里云 Redis 监控指标在从 4.0 升级到 5.0 后,命中率的计算方式发生了变化。过去,当 5 秒内没有 QPS 时,命中率可能被视为 100%,但新机制下,若 5 秒内无 QPS,则命中率直接被计为 0%。
📉 **监控准确性受影响**: 这种新的计算逻辑导致命中率指标在业务低峰期(例如夜间)出现大幅下降,即使 Key 命中数远高于未命中数。用户自行计算的命中率与监控显示的数值存在巨大差异,给判断系统性能带来困扰。
⚙️ **监控阈值设置难题**: 由于命中率在不同时间段波动剧烈,从 0% 到 80% 不等,用户难以设定一个合适的监控阈值。阈值设低可能导致夜间误报,设高则可能在白天关键时刻漏报。
💡 **用户期望与实际不符**: 文章指出,用户期望的命中率计算应基于实际的 Key 访问情况,而非固定时间窗口内的 QPS 状态。当前的 5 秒无 QPS 即为 0% 的逻辑,与用户对命中率的直观理解存在偏差,需要进一步优化以提高监控的有效性和准确性。
区间为 5s ,00:00 的 hit 与 miss 值与 00:05 的值都相等,也就是说 5s 里 redis 都没有 qps 。那此时的命中率应该是多少呢?
-----
在阿里云上,从 Redis 开源版 4.0 升级至 5.0 后,命中率监控持续报警说命中率只有 40%左右。通过 info 查看,自己按照 命中率=Key 命中数÷( Key 命中数+Key 未命中数)计算,命中率应该在 90%以上,遂提交工单询问监控命中率计算问题。经过 3 个半小时的内部讨论给了如下回复(忽略标题内容)。

阿里云命中率指标的获取最小周期是 5s ,也就是 5s 内都没有 QPS 的时候,这 5s 的命中率就为 0 (以前为 100%)。除非每秒都有 QPS ,那在阿里云云监控中,那刻的命中率才会显示为 100%。下图就是为 0 的情况。
越看这个逻辑越别扭。像上图这种正常情况下,命中率指标能覆盖 0%-100%,这还咋设置监控呢。
我们业务无法保障每秒都有 qps ,按照现在的算法,1 分钟的区间,晚上的命中率能到 10%,白天可能到 80%,监控命中率完全无法设置阈值,如果设置过低,白天的 key miss 可能就无法触发报警,设置略高,晚上报警不断。。。