Redis 缓存实战:用好了效率提升

举报
静水流深-云海 发表于 2026/09/16 10:12:16 2026/09/16
【摘要】 缓存是把双刃剑。聊聊缓存读写的标准姿势(Cache Aside)、怎么防穿透/击穿/雪崩,以及过期时间打散这种不起眼但救命的细节。华为云 GaussDB(for Redis) 也是同一套用法。配一张命中/未命中流程图。

一、先说标准姿势:Cache Aside

业界最通用的就是"旁路缓存"——读时先查缓存,没有再查库并回写;写时先更库,再删缓存(不是更缓存,避免并发下脏数据):

读:缓存有 → 返回;缓存无 → 查 DB → 写入缓存 → 返回
写:更新 DB → 删除缓存(下次读自动重建)

为什么删除而不是更新缓存?因为并发写时,谁先谁后不确定,删缓存最省心,反正下次读会重建。

二、三个经典翻车现场

问题 现象 解法
缓存穿透 查不存在的 key,每次都打到 DB 空值也缓存(短过期)+ 布隆过滤器
缓存击穿 某个热点 key 过期瞬间,海量请求涌向 DB 互斥锁重建 / 逻辑过期
缓存雪崩 大量 key 同一时刻失效 过期时间加随机值打散

image.png

三、过期时间一定打散

这是最容易被忽略、却最能救命的一点。如果所有缓存都设 1 小时,到点一起失效,DB 瞬间被压垮:

// 伪代码:基础 1 小时 + 随机 0~10 分钟
int ttl = 3600 + new Random().nextInt(600);
redis.set(key, value, ttl, TimeUnit.SECONDS);

四、别把 Redis 当数据库

Redis 是缓存,默认持久化未必及时。重要数据该落库的落库,缓存只加速读取。我见过有人把订单状态只放 Redis,一重启全丢,对账对到崩溃。

五、其他的选择

自己搭 Redis 要管主从、哨兵、扩容;嫌麻烦可以直接用华为云 GaussDB(for Redis),兼容 Redis 协议,容量和可靠性交给平台。用法和原生 Redis 一模一样,上面那些坑照样要避开,只是运维省了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。