Cache stampede в Go. Как предотвратить?

Ответ

Stampede - одновременное истечение TTL у многих ключей, лавина запросов к БД. Решения: singleflight - один запрос обновляет кеш, остальные ждут результата (golang.org/x/sync/singleflight). Или блокировка (mutex по ключу): первый захватывает, остальные ждут или читают старое. Случайный разброс TTL уменьшает одновременное истечение.

var group singleflight.Group
v, err, _ := group.Do(key, func() (interface{}, error) {
    return loadFromDB(ctx, key)
})
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.