学习笔记 | 使用增强版 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

}

目录
相关文章
|
5月前
|
Prometheus DataWorks 安全
DataWorks产品使用合集之如何完成更新完自动推送到外部系统触发更新
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
|
SQL 监控 数据处理
实时计算 Flink版产品使用问题之加了一个条件,初次同步的时候,会先把所有符合条件的数据读出来吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
小程序 API 数据库
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
99 0
|
5月前
|
存储 运维 Serverless
函数计算产品使用问题之代码上传记录如何查看
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
|
5月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之怎么实现推送推多个表格
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之开启分支或标签过滤功能在哪里使用
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
存储 运维 DataWorks
DataWorks产品使用合集之怎么实现时间字段进行分区同步
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
|
SQL DataWorks 数据处理
DataWorks产品使用合集之假设存在时间戳字段: 假设源表有一个记录数据更新时间的字段,如何设置过滤条件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
31 1
|
7月前
|
资源调度 DataWorks 安全
DataWorks产品使用合集之在离线同步任务中,可以使用函数对日期和时间参数进行拼接吗
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
67 7