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
}

最新文章

  1. SQLite文件查看工具DB Browser for SQLite
  2. css3圆形头像(当图片宽高不相等时)
  3. Bzoj3144 [Hnoi2013]切糕
  4. Gradle basic
  5. 每日vim插件--vim中的文本对象及相关插件
  6. 老爷车IE8如何兼容图标字体
  7. 【Python笔记】图片处理库PIL的源代码安装步骤
  8. NEC遥控信号解码(包含完整代码)
  9. 使用FSharp 探索Dotnet图像处理功能2--均衡灰度
  10. C# 真正能发邮件的源码
  11. Git-分布式版本控制系统(二)
  12. 浅析Linux内核调度
  13. GC调优在Spark应用中的实践(转载)
  14. asp.net core部署时自定义监听端口,提高部署的灵活性
  15. Github以及推广
  16. PHP 计算两个时间戳之间相差的时间
  17. 在Asp.net core中使用WebScocket
  18. 算法笔记_226:填符号凑算式(Java)
  19. opencart安装和使用PHPMailer
  20. 201610-H5项目总结

热门文章

  1. 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理
  2. 如何修剪git reflog历史
  3. 多线程之Semaphore登录限流示例
  4. Autodesk Maya2023 破解版安装教程(小白看了也说understand)
  5. UBUNTU18.04安装使用ORB-SLAM2
  6. Solon2 之基础:一、常用应用配置说明
  7. Distinct Paths
  8. redis(10)事务和锁机制秒杀
  9. 使用Shapefile-js读取shp文件并使用WebGL绘制
  10. OpenLayers入门练习