Redis 性能瓶颈时如何处理?

当 Redis 遇到性能瓶颈时,需要从多个维度进行排查和优化。以下是系统化的解决方案,涵盖硬件、配置、数据模型、网络等关键点:


一、硬件资源优化

  1. 内存瓶颈

    • 现象:频繁触发 OOMused_memory 接近物理内存。
    • 解决
      • 升级服务器内存(如从 32GB 升级到 128GB)。
      • 启用 Redis 6.0+ 的 maxmemory-policy 合理淘汰策略(如 allkeys-lru)。
      • 监控 used_memory_rssused_memory,避免内存碎片(超过 1.5 倍时需重启或使用 MEMORY PURGE)。
  2. CPU 瓶颈

    • 现象used_cpu_sysused_cpu_user 持续高位,QPS 无法提升。
    • 解决
      • 升级 CPU(如从 4 核升级到 16 核)。
      • 启用 Redis 6.0+ 的多线程 I/O(io-threads 4)。
      • 避免复杂命令(如 KEYS *SORT),改用 SCAN 或客户端分片。
  3. 网络瓶颈

    • 现象instantaneous_ops_per_sec 接近网卡带宽(如千兆网卡理论峰值 125MB/s)。
    • 解决
      • 升级网卡(如万兆网卡)。
      • 启用压缩(如 lzf 压缩 RDB 文件)。
      • 使用连接池减少 TCP 握手开销。

二、配置参数调优

  1. 持久化优化

    • RDB
      • 调整 save 策略(如 save 900 1 改为 save 3600 1 减少触发频率)。
      • 使用 bgrewriteaof 替代频繁 bgsave
    • AOF
      • 启用 aof-use-rdb-preamble yes(Redis 4.0+ 混合持久化)。
      • 调整 auto-aof-rewrite-percentageauto-aof-rewrite-min-size
  2. 内存分配器

    • 现象mem_allocator 使用 jemalloc 但仍有碎片。
    • 解决
      • 编译时指定 MALLOC=libcMALLOC=tcmalloc(需测试性能差异)。
      • 定期重启 Redis 清理碎片(生产环境需谨慎)。
  3. 超时与重试

    • 设置 timeout 0(默认不超时),但需监控慢查询(slowlog-log-slower-than 10000)。
    • 客户端启用重试机制(如 Jedis 的 retryAttempts)。

三、数据模型与访问模式优化

  1. 减少大键(Big Key)

    • 现象MEMORY USAGE key 返回值超过 10KB。
    • 解决
      • 拆分大键(如将 Hash 拆分为多个小 Hash)。
      • 使用 HSCAN 替代 HGETALL
  2. 热点键(Hot Key)

    • 现象INFO keyspace 中某些键的访问量远高于其他键。
    • 解决
      • 使用本地缓存(如 Guava Cache)减少 Redis 访问。
      • 将热点键迁移到独立 Redis 实例(如分片集群)。
  3. 批量操作

    • 使用 MGET/MSET 替代多次 GET/SET
    • 使用 Pipeline 减少 RTT(如 redis-cli --pipe 导入数据)。

四、架构扩展方案

  1. 读写分离

    • 适用场景:读多写少(如 10:1)。
    • 实现
      • 主节点写,从节点读(replicaof)。
      • 客户端路由(如 Spring Data Redis 的 ReadFrom 策略)。
  2. 分片集群

    • 适用场景:单实例内存或 QPS 达到上限。
    • 方案
      • Redis Cluster(自动分片,支持 16384 个槽)。
      • Twemproxy/Codis(需手动管理分片)。
  3. 缓存穿透/雪崩/击穿防护

    • 穿透:空值缓存(如 SET key "" EX 60)。
    • 雪崩:随机过期时间(如 EX rand(60,120))。
    • 击穿:互斥锁(如 SETNX 锁 + 双重检查)。

五、监控与诊断工具

  1. 实时监控

    • INFO 命令:关注 instantaneous_ops_per_secused_memorykeyspace_hits
    • MONITOR 命令(生产环境慎用,影响性能)。
    • Prometheus + Grafana:监控 redis_commands_processed_total 等指标。
  2. 慢查询分析

    • SLOWLOG GET 10 查看最近 10 条慢查询。
    • 优化慢查询(如将 HGETALL 改为 HSCAN)。
  3. 性能测试

    • redis-benchmark -n 100000 -c 50 模拟高并发。
    • 使用 memtier_benchmark 测试混合读写场景。

六、案例:从单实例到集群的迁移

  1. 问题:单实例 Redis 内存 80GB,QPS 5 万,但写入延迟超过 50ms。
  2. 优化步骤
    • 启用多线程 I/O(io-threads 4),延迟降至 30ms。
    • 迁移到 Redis Cluster(3 主 3 从),QPS 提升至 15 万,延迟稳定在 10ms。
    • 热点键拆分到独立实例,延迟进一步降至 5ms。

总结

Redis 性能瓶颈的解决需结合 硬件升级、配置调优、数据模型优化、架构扩展 四方面。建议优先通过监控定位瓶颈点(如 INFOSLOWLOG),再针对性优化。对于高并发场景,分片集群是最终解决方案,但需权衡运维复杂度。

我正在程序员刷题神器面试鸭上高效准备面试,9000+ 高频面试真题、800 万字优质题解,覆盖主流编程方向,跟我一起刷原题、过面试:
点击进入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84531.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多相机三维人脸扫描仪:超写实数字人模型制作“加速器”

超写实数字人,又称“数字分身”,是以真人形象为原型构建的高仿真虚拟形象,按维度可分为2D数字人与3D数字人。这类数字人已广泛应用于影视制作、游戏交互、品牌直播等场景,其核心价值在于通过技术手段实现真人形象的数字化复刻&…

ceph 自动调整 pg_num

要让 Ceph 的 pool 自动调整 pg_num(PG 数量),你需要启用 PG autoscaler。这是从 Ceph Octopus(15.x) 开始引入的功能,能根据池的容量和对象数量自动建议或调整 pg_num,以实现负载均衡。 ✅ 一步步开启 Pool 的 pg_num 自动调整 1. 启用 PG autoscaler 模块(通常默认启…

Python Beautiful Soup 4【HTML/XML解析库】 简介

全面剖析大模型 图解大模型:生成式AI原理与实战 大语言模型大模型应用开发Transformer DeepSeek模型原理开发深度学习 图灵出品 大模型强化学习详解 大模型算法:强化学习、微调与对齐(全彩)详解强化学习 RLHF GRPO DPO SFT CoT D…

AI Agent开发与安全

AI Agent的核心演进 Level 1:LLM Agent(聊天机器人) 特点:靠提示词工程赋予人设(如星座占卜、角色扮演),但存在幻觉问题,输出不可控。局限:娱乐性强,难胜任严…

NumPy玩转数据科学

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 一、引言二、NumPy 概述2.1 NumPy 的定义与发展2.2 NumPy 的重要性 三、NumPy 的多维数组支持3.1 多维数组的概念3.2 多维数组的创建与操作3.2.1 数组的创建3.2.2 数组的索引和切片3.2.3 数组的运…

【uniapp小程序开发】图表组件ucharts的使用(入门)

一、插件的安装 安装非常简单,打开uniapp的插件市场,导入到项目中即可 下载地址:https://ext.dcloud.net.cn/plugin?id271 二、开始实践 先看页面的效果 页面中实现了三个基本图形的展示:折线图、饼图和柱状图。 上图左一&a…

APISIX+etcd高可用集群部署方案详解

#作者:任少近 文章目录 一、背景二、部署etcd1、etcd的svc部署yaml2、Etcd 服务定义说明3、etcd的statefulset部署yaml4、Etcd 状态集(StatefulSet)配置说明5、查看集群状态 三、部署apisix的deployment部署1、apisix部署yaml文件2、APISIX …

Excel常用公式大全

资源宝整理分享:https://www.httple.net Excel常用公式大全可以帮助用户提高工作效率,掌握常用的Excel公式,让数据处理和计算工作更加便捷高效。了解公式学习方法、用途,不再死记硬背,拒绝漫无目的。 命令用途注释说…

什么是Seata?

深入解析Seata:分布式事务的终极解决方案 什么是Seata? Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,由阿里巴巴中间件团队于2019年1月发起并开源(最初…

【系统规划与管理师第二版】1.3 新一代信息技术及发展

一、物联网 物联网(IoT)是指通过信息传感设备,按约定的协议将任何物品与互联网相连接,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的网络。物联网主要解决物品与物品(T2T)、人…

在Spring Boot中自定义JSON返回日期格式的指南

在开发Spring Boot应用时,很多时候需要在返回的JSON数据中以特定格式显示日期和时间。例如,使用LocalDateTime、Date等类型的字段时,默认的序列化格式可能不是你期望的路径。本文将介绍如何在Spring Boot中实现控制返回JSON数据的日期格式&am…

【大数据高并发核心场景实战】 - 数据持久化之冷热分离

大数据高并发核心场景实战 - 数据持久化之冷热分离 当云计算平台的业务后台处理工单突然接入客服系统的请求洪流,每日新增10万工单,3000万主表1.5亿明细表的数据库开始呻吟——是时候请出「冷热分离」这剂退烧药了! 一、业务场景:…

【AI Study】第四天,Pandas(6)- 性能优化

文章概要 本文详细介绍 Pandas 的性能优化技术,包括: 内存优化计算优化大数据处理实际应用示例 内存优化 数据类型优化 # 查看数据类型 df.dtypes# 查看内存使用情况 df.memory_usage(deepTrue)# 优化数值类型 # 将 float64 转换为 float32 df[floa…

c++系列之智能指针的使用

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 智能指针的使用及原理 AII(Resource Acquisition Is Initializatio…

知识蒸馏(Knowledge Distillation, KD)

知识蒸馏(Knowledge Distillation, KD)是一种模型压缩与知识迁移技术,通过让小型学生模型(Student)模仿大型教师模型(Teacher)的行为(如输出概率分布或中间特征表示)&…

chatGPT 会扩大失业潮吗?

击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 对于部分人而言,失业是必然趋势。 这不,身后的一测试大哥,自从公司解散之后,已经在家待业半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基础 -- Verilog行为级建模之时序控制

Verilog 行为级建模(Behavioral Modeling)中“时序控制”机制的系统化由浅入深培训内容,适用于初学者到进阶 FPGA 设计工程师的学习路径。 🎯 一、行为级建模的定位 行为级建模(Behavioral Modeling)是 Ve…

设计模式精讲 Day 7:桥接模式(Bridge Pattern)

【设计模式精讲 Day 7】桥接模式(Bridge Pattern) 文章简述 在软件系统中,类的继承关系往往会导致类爆炸,尤其是在需要组合多种功能或行为时。桥接模式(Bridge Pattern)通过将抽象部分与其实现部分分离&am…

Apipost 签约锐捷网络:AI赋能,共推 ICT 领域 API 生态智能化升级

日前,北京北极狐信息科技有限公司(简称 “北极狐科技”)与锐捷网络股份有限公司(简称 “锐捷网络”)正式签署合作协议,双方将聚焦 ICT 基础设施及解决方案领域,围绕 API 全链路管理与智能化研发…