SingleFlight
2024-09-08 18:29:29
Go 语言扩展包中提供了另一种同步原语,它能够在一个服务中抑制对下游的多次重复请求。一个比较常见的使用场景是:我们在使用 Redis 对数据库中的数据进行缓存,发生缓存击穿时,大量的流量都会打到数据库上进而影响服务的尾延时
在资源的获取非常昂贵时(例如:访问缓存、数据库),就很适合使用 golang/sync/singleflight.Group 优化服务
type service struct {
requestGroup singleflight.Group
}
func (s *service) handleRequest(ctx context.Context, request Request) (Response, error) {
v, err, _ := s.requestGroup.Do(request.Hash(), func() (interface{}, error) {
rows, err := // select * from tables
if err != nil {
return nil, err
}
return rows, nil
})
if err != nil {
return nil, err
}
return Response{
rows: rows,
}, nil
}
最新文章
- SQLite文件查看工具DB Browser for SQLite
- css3圆形头像(当图片宽高不相等时)
- Bzoj3144 [Hnoi2013]切糕
- Gradle basic
- 每日vim插件--vim中的文本对象及相关插件
- 老爷车IE8如何兼容图标字体
- 【Python笔记】图片处理库PIL的源代码安装步骤
- NEC遥控信号解码(包含完整代码)
- 使用FSharp 探索Dotnet图像处理功能2--均衡灰度
- C# 真正能发邮件的源码
- Git-分布式版本控制系统(二)
- 浅析Linux内核调度
- GC调优在Spark应用中的实践(转载)
- asp.net core部署时自定义监听端口,提高部署的灵活性
- Github以及推广
- PHP 计算两个时间戳之间相差的时间
- 在Asp.net core中使用WebScocket
- 算法笔记_226:填符号凑算式(Java)
- opencart安装和使用PHPMailer
- 201610-H5项目总结