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

6.1、Redis多级缓存原理和优化、Redis部分参数优化调整

多级缓存架构原理与优化

多级缓存核心架构
命中
未命中
命中
未命中
命中
未命中
客户端请求
Nginx本地缓存
直接响应
应用内存缓存
返回数据并刷新Nginx缓存
Redis分布式缓存
返回数据并刷新应用缓存
数据库查询
  1. Nginx本地缓存(最小)

    • 定位:最前端缓存层
    • 特点
      • 存储热点静态资源(图片/CSS/JS)
      • 使用proxy_cache模块实现动态内容缓存
      • 过期时间短(秒级),快速失效
    • 优势:响应速度最快(微秒级)
  2. 应用内存缓存(稍大)

    • 定位:应用级二级缓存
    • 实现
      • Caffeine/Guava/Ehcache
      • Spring Cache注解驱动
    • 策略
      • 最大条目限制(如10,000条)
      • LRU淘汰策略
      • 异步刷新机制
    • 场景:高频访问的动态数据(如商品详情)
  3. Redis分布式缓存(最大)

    • 定位:共享三级缓存
    • 特性
      • 集群化部署(Redis Cluster)
      • 数据持久化(RDB+AOF)
      • 横向扩容能力
    • 数据:全量业务数据最终屏障

Redis连接池深度优化

核心参数配置矩阵
参数作用描述计算公式配置建议
maxTotal最大连接数QPS预期/(1000/平均耗时ms)理论值×1.2(预留缓冲)
maxIdle最大空闲连接数= maxTotal避免连接池伸缩抖动
minIdle最小空闲连接数= maxTotal×0.3防止突发流量新建连接延迟
testOnBorrow借出连接校验-true(确保连接可用性)
参数优化实践
  1. maxTotal动态计算

    // 参数定义
    int expectedQPS = 50000;    // 业务预期QPS
    float avgCommandTime = 1.0f; // 命令平均耗时(ms)// 计算公式
    int theoreticalValue = (int) Math.ceil(expectedQPS / (1000 / avgCommandTime));
    int maxTotal = (int) (theoreticalValue * 1.2);  // 增加20%缓冲
    
  2. 连接池最佳配置

    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(120);       // 理论值100,增加缓冲
    config.setMaxIdle(120);        // 等于maxTotal消除扩容开销
    config.setMinIdle(40);         // 保底33%空闲连接
    config.setTestOnBorrow(true);  // 借出时健康检查
    
  3. 阻塞场景应对策略

    • 问题:大命令阻塞导致连接池耗尽
    • 解决方案
      // 添加熔断机制
      CircuitBreaker breaker = new CircuitBreaker().withFailureThreshold(5, 1) // 5秒内5次失败触发.withWaitDuration(30);      // 熔断30秒
      

多级缓存调优策略

  1. Nginx层优化

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60s use_temp_path=off;server {location / {proxy_cache my_cache;proxy_cache_valid 200 5s;  # 动态内容缓存5秒add_header X-Cache-Status $upstream_cache_status;}
    }
    
  2. 内存缓存选择

    缓存框架适用场景QPS支持
    Caffeine高并发读场景200万+
    Ehcache堆外内存管理50万+
    Guava简单轻量级缓存30万+
  3. Redis集群规划

    • 数据分片:CRC16算法分16384槽
    • 扩容公式节点数 = 预期容量 / 单节点建议容量(20GB)
    • 连接池配置maxTotal = (业务线程数 × 节点数) × 1.2

关键问题避坑指南

  1. 连接泄露检测

    # 监控Redis连接使用
    redis-cli info clients
    # Clients
    connected_clients:145
    client_longest_output_list:0
    client_biggest_input_buf:0
    
  2. 缓存穿透防御组合拳

    // 三级防护机制
    public Product getProduct(Long id) {// 1. 布隆过滤器拦截if (!bloomFilter.mightContain(id)) return null; // 2. 内存缓存查询Product p = localCache.get(id); // 3. Redis查询(含空值缓存)if (p == null) p = redis.getWithNullCache(id); 
    }
    
  3. 热点Key监控

    # Redis热点Key检测
    redis-cli --hotkeys
    # 输出样例
    [47.62%] hot key: 'product:1001' with 142356 requests
    

通过分级缓存架构和精细化的连接池配置,可构建支持10万+QPS的高并发系统。核心要点:缓存分层衰减连接池静态化热点动态探测,三者结合实现性能与资源的平衡。

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

相关文章:

  • Python篇--- Python 的加载、缓存、覆盖机制
  • 01.Redis 概述
  • 复现cacti的RCE
  • ELECTRICAL靶机
  • [硬件电路-145]:模拟电路 - 常见的电源芯片、用途、管脚定义
  • Spring+K8s+AI实战:3全栈开发指南
  • LeetCode Hot 100,快速学习,不断更
  • Steam饥荒联机版多人服务器搭建全解析 -- 阿里云Linux系统构建云服务器
  • kafka创建topic报错解决思路之一
  • 常⻅框架漏洞
  • 计算用户日活:从数据设计到可视化的全流程(高频场景题)
  • sqli-labs:Less-26关卡详细解析
  • C++-二叉树OJ题
  • 外设数据到昇腾310推理卡 之五 3403ATU
  • react native中markdown添加数学公式的支持
  • Java ++i 与 i++ 底层原理
  • 机器翻译入门:定义、发展简史与核心价值
  • [自动化Adapt] 录制引擎
  • MVCC:数据库事务隔离的 “时空魔法”
  • mysql管理
  • 【Linux系统】进程间通信:匿名管道
  • http://localhost:8080/photos/xxx.png的本地图片访问方案
  • 常见的框架漏洞(Thinkphp,spring,Shiro)
  • io_submit系统调用及示例
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-54,(知识点:硬件设计流程)
  • 知识随记-----MySQL 连接池健康检测与 RAII 资源管理技术
  • vulnhub-noob靶机攻略
  • ICT模拟零件测试方法--电位器测试
  • 【QT】常⽤控件详解(二)windowOpacitycursorfontsetToolTipfocusPolicystyleSheet
  • 8.1.3 TiDB集群方案雨Replication原理