
前言MySQL 磁盘 IO 读写速度有限高并发场景下频繁查询数据库会造成 CPU、IO 打满接口超时。Redis 基于内存读写毫秒级响应行业标准架构MySQL 存持久化数据Redis 缓存热点高频数据。一、Redis 与 MySQL 分工MySQL持久化存储全量业务数据保证数据不丢失负责写操作、复杂统计、事务Redis内存缓存热点数据减少 MySQL 查询压力支撑高并发读请求。适合缓存的数据商品详情、首页轮播、分类列表用户基础信息、配置字典热点订单、活动秒杀库存统计结果、页面高频分页列表。不适合缓存低频冷数据、大量实时修改数据强一致性财务订单数据。二、标准读写策略Cache-Aside旁路缓存开发最常用1. 查询流程读前端请求查询数据先查询 Redis 缓存缓存命中 → 直接返回数据不访问 MySQL缓存未命中缓存穿透→ 查询 MySQL将数据库结果写入 Redis设置过期时间返回数据。伪代码示例// 根据商品id查询 String key goods: goodsId; String cache redis.get(key); if(cache ! null){ return JSON.parse(cache); } // 缓存无数据查数据库 Goods goods goodsMapper.selectById(goodsId); if(goods ! null){ redis.setEx(key,3600,JSON.toJSONString(goods)); } return goods;2. 更新流程写先更新 MySQL 数据库删除 Redis 对应缓存不做更新避免双写不一致下次查询自动重新加载最新数据到缓存。// 更新商品 goodsMapper.updateById(goods); // 删除缓存使缓存失效 redis.del(goods: goods.getId());三、三大缓存问题解决方案1. 缓存穿透查询不存在数据频繁打数据库现象恶意查询不存在 IDRedis 无缓存每次直达 MySQL 解决缓存空值、布隆过滤器拦截非法 ID。2. 缓存击穿热点 key 过期大量请求涌入数据库现象热门商品缓存同时过期并发全部查 MySQL 解决互斥锁、永不过期、随机过期时间分散。3. 缓存雪崩大量 key 同时过期数据库瞬间压垮解决过期时间增加随机偏移量避免统一过期。四、实战业务场景示例场景 1首页商品缓存商品表数据存入 Redis过期 1 小时更新商品删除缓存。场景 2秒杀库存MySQL 存真实库存Redis 预加载库存并发扣减缓存异步同步数据库。场景 3字典表、系统配置全局静态配置永久缓存后台修改配置后清空缓存。五、RedisMySQL 开发规范写操作优先操作数据库再删缓存禁止先改缓存再更新 DB缓存统一设置过期时间避免无限堆积内存复杂事务数据不依赖缓存以 MySQL 数据为准缓存 key 统一规范业务:类型:id方便管理分布式环境使用序列化统一存储 JSON避免编码乱码。六、架构优势总结大幅降低 MySQL 查询压力提升接口响应速度支撑更高并发访问应对秒杀、首页流量高峰冷热数据分离磁盘数据库只处理低频写与冷数据查询。