学习笔记 | 使用增强版 singleflight 合并事件推送,效果炸裂

简介: 学习笔记 | 使用增强版 singleflight 合并事件推送,效果炸裂

go01.jpeg

https://mp.weixin.qq.com/s/KUkzHS4Yfad3l_CnU49lLg

singleflight 是什么

singleflight 直接翻译为"单(次)飞(行)"

举个例子,当程序中有读(如 Redis、MySQL、Http、RPC等)请求,且并发非常高的情况,使用 singleflight 能得到比较好的效果,它限制了同一时刻只有一个请求在执行,也就是并发永远为1

singleflight 的原理

将整个代码分成三块:

① 懒加载方式初始化 map;

② 如果当前 key 存在,即相同请求正在调用中,就等它完成,完成后直接使用它的 value 和 error;

③ 如果当前 key 不存在,即没有相同请求正在调用中,就创建一个 call 对象,并把它放进 map,接着执行 fn 函数,当函数执行完唤醒 waitGroup,并删除 map 相应的 key,返回 value 和 error

读可以抑制,写呢?

增强代码参考

package singleflight


import(

"sync"

)


type WriteGroup struct{

mu    sync.Mutex

wgs   map[string]*sync.WaitGroup

group Group

}


func(g *WriteGroup)Do(key string, fn func()error)error{

g.mu.Lock()

if g.wgs ==nil{

 g.wgs =make(map[string]*sync.WaitGroup)

}

wg, ok := g.wgs[key]

if!ok {

 wg =&sync.WaitGroup{}

 wg.Add(1)

 g.wgs[key]= wg

}

g.mu.Unlock()


if!ok {

 err :=fn()


 g.mu.Lock()

 wg.Done()

 delete(g.wgs, key)

 g.mu.Unlock()

 return err

}


wg.Wait()

_, err := g.group.Do(key,func()(interface{},error){

 returnnil,fn()

})

return err

}

目录
相关文章
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
486 4
|
监控 安全 物联网
在使用物联网卡过程中的一些限制
在使用物联网卡(IoT卡)的过程中,确实存在一些限制和注意事项,这些限制主要来源于技术、安全、法规以及服务提供商的政策等多个方面。以下是一些常见的限制及操作建议:
|
缓存 NoSQL Java
一次访问Redis延时高问题排查与总结
作者抽丝剥茧的记录了一次访问Redis延时高问题的排查和总结。
|
SQL 存储 NoSQL
SpringBoot整合MongoDB
SpringBoot整合MongoDB
6644 0
SpringBoot整合MongoDB
|
存储 编译器 C语言
单片机学习之路一些常见的疑问也是我的个人学习总结
单片机学习之路一些常见的疑问也是我的个人学习总结
399 0
|
前端开发 图形学
【#Unity Shader#Amplify Shader Editor(ASE)_第一篇】
【#Unity Shader#Amplify Shader Editor(ASE)_第一篇】
|
JSON Go 数据处理
JSON数据处理:匿名结构体助你起飞
JSON数据处理:匿名结构体助你起飞
371 0
|
弹性计算 应用服务中间件 nginx
Kubernetes应用跨可用区实战
本文介绍了如何在阿里云Kubernetes集群部署跨多个可用区的应用。
5214 136
|
API 开发工具 对象存储
网站文件名使用了中文字符并且在上传到 OSS 后无法打开
网站文件名使用了中文字符并且在上传到 OSS 后无法打开
1630 2
|
弹性计算 负载均衡 安全
企业级DMZ上云场景方案
随着企业业务云化进程逐渐进入深水区,简单地使用云上资源出入公网已经无法满足业务的诉求,安全、成本、权限、监控等诉求的迭代,需要企业有系统性地视角来考虑如何做好公网出入口(DMZ)的规划设计。
企业级DMZ上云场景方案

热门文章

最新文章