当前位置: 首页 > news >正文

redis-排查命中率降低问题

1.命中率降低带来的问题

高并发系统,当命中率低于平常的的运行情况,或者低于70%时,会产生2个影响。

  1. 有大量的请求需要查DB,加大DB的压力;
  2. 影响redis自身的性能

不同的业务场景,阈值不一样,一般低于70%时应当排查问题

2.查看命中率

一般是监控工具感知到redis命中率下降,给开发人员发送预警信息,然后开发人员接入排查

方式1-info获取

使用info命令获取

INFO stats

total_connections_received:363810
total_commands_processed:4185370
instantaneous_ops_per_sec:4
instantaneous_write_ops_per_sec:0
instantaneous_read_ops_per_sec:0
instantaneous_other_ops_per_sec:4
total_net_input_bytes:313599223
total_net_output_bytes:6840749159
total_net_repl_input_bytes:0
total_net_repl_output_bytes:158034894
instantaneous_input_kbps:0.16
instantaneous_output_kbps:6.80
instantaneous_input_repl_kbps:0.00
instantaneous_output_repl_kbps:0.00
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:65077
evicted_keys:0
keyspace_hits:240           -- 命中次数
keyspace_misses:15          -- 未命中次数
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:683
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:539
instantaneous_error_replies_ops_per_sec:0
total_reads_processed:4599582
total_writes_processed:3669362
io_threaded_reads_processed:0
io_threaded_writes_processed:0
client_query_buffer_limit_disconnections:0
client_output_buffer_limit_disconnections:0
slot_psync_ok:0
slot_psync_err:0
total_commands_received:4185652
commands_received_per_sec:4
evicted_keys_per_sec:0
hits_per_sec:0
misses_per_sec:0
hit_rate_percentage:0.00
cmd_slowlog_count:0
traffic_control_input:0
traffic_control_input_status:0
traffic_control_output:0
traffic_control_output_status:0
stat_avg_rt:37
stat_max_rt:227

keyspace_hits:240           -- 命中次数
keyspace_misses:15       -- 未命中次数

最近1分钟的命中率:获取两个时间点的命中次数

1分钟的命中次数: 第二次的命中次数 - 第一次的命中次数

1分钟的未命中次数:第二次的未命中次数 - 第一次的未命中次数

命中率 = 1分钟的命中次数 / (1分钟的命中次数 + 1分钟的未命中次数)

方式2-阿里云监控工具

3.获取未命中的key

在应用程序中记录未命中的key

public class RedisCacheUtil {public static <T> T hget(String key, String field) throws BizBussinessRuntimeException {try {Object v = hashOperations.get(key, field);if (v == null) {log.warn("Redis未命中键:" + key);}return (T)v;} catch (Exception e) {log.error("hget(" + key + ") 操作失败!,msg:" + e.getMessage());throw new BizBussinessRuntimeException(IErrMsg.ERR_REDIS, "Redis操作失败");}}public static <T> T getObject(String key) throws BizBussinessRuntimeException {try {Object v = valueOperations.get(key);if (v == null) {log.warn("Redis未命中键:" + key);}return (T) v;} catch (Exception e) {log.error("getObject(" + key + ") 操作失败!,msg:" + e.getMessage());throw new BizBussinessRuntimeException(IErrMsg.ERR_REDIS, "Redis操作失败");}}// 其它代码...
}

可以使用DB、ES记录最近的未命中的key,命中率下降时,则分析这个时间段的key的分布,进而分析出原因。

4.可能导致下降的原因

大量的同一个key:  缓存击穿(热点数据过期、key突然变成热点)

大量DB不存在的key: 缓存穿透(人为攻击、代码bug)

大量的多个key: 缓存雪崩

http://www.lryc.cn/news/525280.html

相关文章:

  • ui文件转py程序的工具
  • Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案
  • Oracle 数据库常见字段类型大全及详细解析
  • U3D的.Net学习
  • Tomcat下载配置
  • adb常用指令(完整版)
  • 大数据学习(36)- Hive和YARN
  • C# ASP.NET MVC项目内使用ApiController
  • Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
  • “推理”(Inference)在深度学习和机器学习的语境
  • 字节腾讯阿里大厂面经汇总:Java集合(容器)大厂面试题及参考答案
  • 数据结构(初阶)(一)----算法复杂度
  • 构建高效稳定的网络环境
  • 使用Edge打开visio文件
  • ChatGPT Prompt 编写指南
  • 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析
  • 安卓动态设置Unity图形API
  • 通信协议—WebSocket
  • helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
  • 数据结构——实验一·线性表
  • 快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)
  • OpenCV相机标定与3D重建(66)对立体匹配生成的视差图(disparity map)进行验证的函数validateDisparity()的使用
  • 2025年新开局!谁在引领汽车AI风潮?
  • Spring自定义BeanPostProcessor实现bean的代理Java动态代理知识
  • 三篇物联网漏洞挖掘综述
  • Pytorch深度学习指南 卷I --编程基础(A Beginner‘s Guide) 第1章 一个简单的回归
  • 【EXCEL_VBA_实战】多工作薄合并深入理解
  • mysql之表的外键约束
  • Tuning the Go HTTP Client Settings
  • 第二十四课 Vue中子组件调用父组件数据