发布时间:2026/9/2 9:44:41
go-zero 数据库性能优化实践:用缓存与读写分离把 P99 拉下来 go-zero 数据库性能优化实践用缓存与读写分离把 P99 拉下来【免费下载链接】go-zeroA cloud-native Go microservices framework with cli tool for productivity.项目地址: https://gitcode.com/GitHub_Trending/go/go-zero上周值班一条详情接口的 P99 从 40ms 跳到 150ms 以上数据库连接池同步顶满。排查后发现问题不在 SQL而在回源太多。这篇以 go-zero 内置的数据库性能优化组件为主线讲清楚缓存与读写分离怎么用从诊断到验证每一步都能对着监控落地。 先判断慢在哪3个信号区分库问题和访问问题上来就加索引、升配往往白忙。动手前先盯三个信号慢查询日志与库 CPU慢日志多、CPU 高企是 SQL 本身或索引的问题先修语句回源占比接口 QPS 约等于数据库 QPS、缓存未命中回源查询占比接近 100%说明每个请求都在打库是访问方式的问题库空闲但 P99 高数据库 CPU 不高服务 P99 却上去了连接池打满——多半是冗余查询多、读写没分流不是机器的事。多数慢查询告警最后都会落在访问层。先归类再开方。⚡ 处方一用 go-zero 缓存组件接管热点查询一句话原理缓存组件的TakeCtx按先查缓存、未命中查库并回填执行未命中路径由 SingleFlight 兜底同一个 key 只放一个请求去回源其余请求等结果。最小示例配置一个缓存节点再用 goctl 生成带缓存的 modelCache: - Redis: Host: redis:6379 Weight: 10goctl model mysql datasource -urlroot:123tcp(mysql:3306)/user_db -tableuser -c -prefixcache#user#适用边界缓存依赖 Redis它是新增的强依赖——Redis 抖动时Take直接报错接口跟着降级只适合 key 集合有限、读多写少的热点数据全量扫描的大结果集不要缓存框架只负责读穿透写入数据后要自己调用DelCtx删掉对应缓存否则读到旧值。 处方二一行配置开读写分离一句话原理sqlx 的SqlConf里补上Replicas从库列表和Policyround-robin 或 random即可主库仍是DataSource路由逻辑见 读写分离策略源码。最小示例DataSource: roottcp(primary:3306)/user_db Replicas: - roottcp(replica1:3306)/user_db - roottcp(replica2:3306)/user_db Policy: round-robin配置生效后默认所有读写仍走主库需要显式声明意图读操作想分流就用sqlx.WithReadReplica(ctx)把请求指到从库写后立即读的场景用sqlx.WithReadPrimary(ctx)强制回主库。适用边界事务永远在主库执行Replicas对事务内语句不生效存在主从延迟时强一致读必须切WithReadPrimary接受从库就要接受秒级旧数据读流量有明显水位差才值得配从库QPS 只有个位数的服务别为了分离而分离。 验证效果P99、连接池与回源占比三个必看指标改完不要只看感觉变快了盯三个指标接口 P99 延迟、主库连接池峰值水位、缓存回源查询占比。go-zero 的 cache 内部自带 stat 统计见core/stores/cache/cachestat.go命中与未命中可以直接接到现有监控里。至少观察 3 个完整业务日对比前后指标优化前优化后接口 P99 延迟约 150ms约 25ms主库连接池峰值水位约 90%约 35%缓存回源查询占比100%未开缓存约 8%若 P99 没降但回源占比降了回库查慢日志若两者都没变先确认缓存和从库配置真的被加载了而不是改错文件。什么时候别用边界与代价高频写热数据某个 key 每秒都被更新时缓存反复失效、反复回源删除开销大于收益这类数据直读数据库更划算。低流量服务别硬上读流量本来就不高再引入一组从库加 Redis等于平添两个故障点读写分离的前提是读多写少且读流量有水位。一致性窗口是真实存在的先更新库再删缓存的顺序也有删除失败或并发插入的窗口期账务、库存扣减这类强一致链路不要放从库读也不要走缓存。缓存与读写分离的底层逻辑都是减少回源数据库的次数、把读流量从主库搬走。顺序固定先靠指标判断问题类型再改配置和路由最后用 P99 与连接池验证。想深入实现细节直接读源码最省力缓存组件与 sqlx 读写分离。【免费下载链接】go-zeroA cloud-native Go microservices framework with cli tool for productivity.项目地址: https://gitcode.com/GitHub_Trending/go/go-zero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/9/2 9:44:41

STM32+ESP8266实现4G模块远程网页配置:AT指令与HTTP解析实战

简介:这是一份面向物联网嵌入式开发初学者与项目工程师的实战型STM32单片机通信配置方案,聚焦于STM32F103与EC800-4G模块的协同开发,解决4G模块远程目标服务器IP/端口的动态配置难题——通过ESP8266构建本地WiFi热点,实现手机APP&…

2026/9/2 9:54:42

KingSCADA 3.7与KIOSP2构建工业数据中枢与自动化月报表系统实战

简介:本资源为KingSCADA 3.7工业监控系统完整安装与运行环境包,集成KIOSP2物联网操作系统平台,面向自动化工程师、SCADA系统运维人员及工业信息化项目实施者,用于构建实时数据采集、远程设备控制、报警管理与历史趋势分析的智能监…

2026/9/2 9:54:42

C51单片机厨房秤设计:从传感器到OLED显示的嵌入式实战

简介:本资源是一套完整的厨房电子秤嵌入式软件设计方案,面向单片机初学者、课程设计学生及电子爱好者,解决基于高精度称重传感与低功耗显示的软硬件协同开发问题。资源包含45个文件,总大小162KB,涵盖C语言源码&#xf…

2026/9/2 9:54:42

Quarc+MATLAB资源代码实战:从实时仿真到快速控制原型

简介:Quarc与MATLAB联合控制系统开发资源包,面向机器人控制、自动化及仿真领域的工程师和研究人员,用于解决实时控制算法设计、系统建模与力反馈应用中的集成问题。压缩包共767个文件,大小13.22MB,含157个mat数据文件、…

2026/9/2 9:54:42

STM32F103C8T6驱动SCD4X二氧化碳传感器:从接线到校准的完整实战

简介:面向嵌入式初学者的STM32F103C8T6驱动Sensirion SCD4X传感器工程示例,重点解决IC总线采集二氧化碳、湿度与温度时的协议配置、命令读取与数据换算问题,覆盖从GPIO初始化、IC主设备收发到传感器数据解析的完整链路,也适合作为…

2026/9/2 9:54:42

ROS导航可视化实验骨架:Qt+C++实现透明可控的导航监控系统

简介:这是一套面向ROS初学者与中级开发者的实验性机器人导航控制平台原型,专为Ubuntu环境下的导航算法验证与GUI交互开发设计,解决自主移动机器人在建图、定位与路径规划环节缺乏轻量级可视化调试工具的问题。资源包共19个文件,含…

2026/9/2 9:49:41

微电网双层多时间尺度优化调度:Matlab源码解析与工程实践

简介:本资源是面向电力系统专业研究生、能源优化方向工程师及MATLAB进阶用户的多能源微网调度实战项目,聚焦可再生能源高渗透场景下微网运行的经济性、稳定性与动态响应难题。压缩包含111个文件(3.58MB),主体为48个MAT…

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…