Golang singleflight 快速上手
文章目录1.简介2.适用场景3.核心方法4.快速上手示例4.1 安装4.2 基本用法5.注意事项6.生产级使用示例带超时控制7.总结1.简介singleflight 是 Go 标准库扩展包golang.org/x/sync/singleflight提供的一个**请求合并请求抑制**工具。singleflight 的核心作用是在多个并发请求同时调用同一个函数时只让第一个请求真正执行其他请求会等待并共享第一个请求的结果。2.适用场景缓存击穿当缓存过期瞬间大量并发请求同时打到数据库singleflight 可以保证只有一个请求去查 DB其他请求等待结果。防止重复计算多个请求同时触发同一个昂贵的计算如生成报告、查询大数据。防止重复 RPC 调用在微服务中多个上游同时请求同一个下游接口时合并请求。3.核心方法方法说明Do(key string, fn func() (interface{}, error)) (interface{}, error, bool)同步执行相同 key 的并发请求只执行一次 fn其他等待结果。返回值shared表示结果是否被共享。DoChan(key string, fn func() (interface{}, error)) -chan Result异步版本返回一个 channel结果通过 channel 返回。Forget(key string)主动清除某个 key 的正在执行状态。下次对该 key 的Do会重新执行而不是等待之前的执行结果。4.快速上手示例4.1 安装go get golang.org/x/sync/singleflight4.2 基本用法packagemainimport(fmtsynctimegolang.org/x/sync/singleflight)// 模拟一个耗时操作比如查询数据库funcfetchDataFromDB(keystring)(string,error){fmt.Printf( 真正执行查询: key%s\n,key)time.Sleep(2*time.Second)// 模拟耗时returnresult_for_key,nil}funcmain(){varg singleflight.Groupvarwg sync.WaitGroup key:user_123concurrency:5fori:0;iconcurrency;i{wg.Add(1)gofunc(idint){deferwg.Done()// Do 方法第一个参数是 key用于去重第二个参数是实际执行的函数result,err,shared:g.Do(key,func()(interface{},error){returnfetchDataFromDB(key)})iferr!nil{fmt.Printf(goroutine %d got error: %v\n,id,err)return}fmt.Printf(goroutine %d got result: %v (shared%v)\n,id,result,shared)}(i)}wg.Wait()}输出大致顺序 真正执行查询: keyuser_123 goroutine 3 got result: result_for_user_123 (sharedtrue) goroutine 0 got result: result_for_user_123 (sharedtrue) ...关键点fetchDataFromDB只被执行了一次只有第一个 goroutine 触发了它。其他 4 个 goroutine等待并共享了第一个的结果。shared为true表示这个结果是和其他调用者共享的。5.注意事项panic 传播如果fn中发生 panicDo会重新 panic不会吞掉异常。建议在fn内部做好 recover。结果共享同一个 key 的多个调用者会共享同一个结果包括错误。如果第一个执行返回错误所有等待者都会收到该错误。key 的作用域singleflight.Group的 key 只在同一个 Group 实例中有效。不同 Group 实例之间的 key 互不影响。内存泄漏风险如果Do的fn执行时间很长甚至永不返回Group会一直持有该 key 的状态导致内存累积。对于长期运行的 key可以考虑在适当时候调用Forget。6.生产级使用示例带超时控制funcGetUserWithCache(ctx context.Context,userIDstring)(*User,error){// 先查缓存...ifcached,ok:cache.Get(userID);ok{returncached,nil}// 使用 singleflight 防止缓存击穿result,err,_:singleflightGroup.Do(userID,func()(interface{},error){// 加个超时控制避免长时间阻塞ctx,cancel:context.WithTimeout(ctx,500*time.Millisecond)defercancel()user,err:fetchUserFromDB(ctx,userID)iferr!nil{returnnil,err}cache.Set(userID,user)returnuser,nil})iferr!nil{returnnil,err}returnresult.(*User),nil}7.总结singleflight 请求合并器确保同一时间对同一个 key 的多个并发请求只执行一次其他请求共享结果。特别适合防止缓存击穿和重复计算。

相关新闻

上海SAP合作伙伴选型实测:4家官方授权服务商技术能力与真实案例对比

上海SAP合作伙伴选型实测:4家官方授权服务商技术能力与真实案例对比

SAP项目上线效果好不好,系统本身只占两成,剩下八成看实施团队。这不是我瞎说,做SAP实施十来年的同行基本都认这个比例。 上海这边SAP官方认证合作伙伴有几十家。但定位差距很大:有的专做大型集团S/4HANA,有的只做中小…

2026/8/1 3:52:14 阅读更多 →
RTL-SDR硬件架构解析:从模拟前端到信号处理链路

RTL-SDR硬件架构解析:从模拟前端到信号处理链路

1. 从一块电视棒到无线电世界的钥匙:RTL-SDR的硬件本质如果你对无线电、频谱分析或者软件定义无线电(SDR)感兴趣,那么“RTL-SDR”这个名字你肯定不陌生。它几乎成了SDR入门和低成本无线电实验的代名词。但很多人可能不知道&#x…

2026/8/1 3:52:14 阅读更多 →
RT-Thread DFS虚拟文件系统:嵌入式开发从裸数据管理到结构化存储的工程实践

RT-Thread DFS虚拟文件系统:嵌入式开发从裸数据管理到结构化存储的工程实践

1. 从“裸奔”到“有章法”:为什么嵌入式开发需要文件系统? 在嵌入式开发这条路上摸爬滚打几年后,我发现自己和很多同行一样,都经历过一个相似的阶段:项目初期,数据量小,几个全局数组、几段静态…

2026/8/1 3:52:13 阅读更多 →

最新新闻

金融数字化转型中的质量挑战与工程实践

金融数字化转型中的质量挑战与工程实践

1. 金融数字化转型中的质量挑战2008年金融危机后,全球金融业开始了一场静悄悄的革命。我清楚地记得2015年参与某大型银行核心系统改造时,项目组每天要处理上百个数据质量问题。当时一位资深架构师对我说:"数字化不是把纸质流程搬到屏幕上…

2026/8/1 4:32:30 阅读更多 →
LangSmith Fleet技能管理:构建生产级AI Agent的工程化基石

LangSmith Fleet技能管理:构建生产级AI Agent的工程化基石

1. 从LangSmith Fleet到技能管理:一个被低估的Agent核心能力最近在折腾LangChain生态里的各种Agent时,我发现一个挺有意思的现象:大家讨论的焦点往往集中在“哪个模型更聪明”、“Prompt怎么设计”、“工具调用准不准”这些“上层建筑”上&am…

2026/8/1 4:32:30 阅读更多 →
ChatGPT免费模型升级实测:幻觉砍半、记忆增强与回答简洁性深度解析

ChatGPT免费模型升级实测:幻觉砍半、记忆增强与回答简洁性深度解析

1. 从一次“幻觉”引发的对话说起 前几天,我正用ChatGPT帮我梳理一份技术文档的框架。我让它总结几个主流开源项目的架构特点,它讲得头头是道,甚至引用了某个项目“在2023年发布的v5.0版本中采用了全新的微服务拆分策略”。我听着觉得有点不对…

2026/8/1 4:32:30 阅读更多 →
计算机视觉中的OpenCV

计算机视觉中的OpenCV

一、OpenCV的介绍OpenCV(Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库,如今,OpenCV 已成为全球最大、使用最广泛的计算机视觉库。二、OpenCV的特点2.1其包含超过 2500 种 经过优化的经典及前沿算…

2026/8/1 4:32:30 阅读更多 →
锚定AI安全基座,深耕垂域智能体落地|通付盾携大群空间LegionSpace亮相2026苏州智博会

锚定AI安全基座,深耕垂域智能体落地|通付盾携大群空间LegionSpace亮相2026苏州智博会

一元复始,万象AI 7月30日,2026年人工智应用博览会在苏州国际博览中心盛大启幕。通付盾携旗下企业级AI智能体工厂大群空间LegionSpace重磅参展,延续WAIC2026世界人工智能大会技术落地成果,以「人工智能安全 垂域超级智能体」核心战…

2026/8/1 4:32:30 阅读更多 →
【Matlab】等离子体物理粒子模拟实现

【Matlab】等离子体物理粒子模拟实现

【Matlab】等离子体物理粒子模拟实现 一、引言 等离子体是由自由电子、带电离子与中性粒子组成的电离气体体系,被称为物质的第四种形态,广泛存在于宇宙空间、大气电离层、核聚变装置、等离子体刻蚀设备、微波放电装置与航空推进系统中。相较于固液气三种常规物质形态,等离…

2026/8/1 4:31:30 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →