Below you will find pages that utilize the taxonomy term “Singleflight”
November 19, 2020
Golang中的并发原语 Singleflight
"在Golang中有一个并发原语是 Singleflight,好像知道的开发者并不多。其中著名的 https://github.com/golang/groupcache 就用到了这个并发原语。\nGolang版本 go1.15.5\n相关知识点 map、Mutex、channel、\n使用场景 一般用在对指定资源频繁操作的情况下,如高并发下的“缓存击穿”问题。\n缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去DB读取数据,这些请求都会击穿缓存到DB,造成瞬时DB请求量大、压力瞬间骤增,导致数据库负载过高,影响整个系统正常运行。(缓存击穿不同于 缓存雪崩 和 缓存穿透)\n怎么理解这个原语呢,简单的讲就是将对同一个资源的多个请求合并为一个请求。\n举例说明,假如当有10万个请求来获取同一个key的值的时候,正常情况下会执行10万次get操作。而使用singleflight并发语后,只需要首次的地个请求执行一次get操作就可以了,其它请求再过来时,只需要只需要等待即可。待执行结果返回后,再把结果分别返回给等待中的请求,每个请求再返回给客户端,由此看看,在一定的高并 …"