单飞模式singleflight

对于热门的主题,如果存在缓存穿透的情况,会导致大量的同进程、跨进程的数据回源到存储层,可能会引起存储过载的情况,如何只交给同进程内,一个人去做加载存储

使用归并回源的思路

https://pkg.go.dev/golang.org/x/sync/singleflight

同进程只交给一个人去获取mysql数据,然后批量返回。同时这个 lease owner投递一个kafka 消息,做 index cacherecovery 操作。这样可以大大减少mysql 的压力,以及大量透穿导致的密集写kafka 的问题。

应用demo: https://www.cyningsun.com/01-11-2021/golang-concurrency-singleflight.html

最后更新于

这有帮助吗?