Обновить
4K+
2
Дмитрий Попов@dixmod

Head of Backend

5
Рейтинг
Отправить сообщение

Хитрости не потребовалось. У меня кэшируется живая статистика, и там обычный sync.RWMutex с double-checked locking: горячий путь под RLock, на промахе берём Lock и перепроверяем условие внутри. Без этой перепроверки десять горутин, упёршихся в истёкший TTL, сходят в базу десять раз вместо одного.

singleflight тут избыточен: он дедуплицирует по ключу и окупается, когда ключей много. У меня ключ один.

Слабое место: пока держится Lock, читатели ждут вместе с ним. Запрос долгий - встали все. Вот тут singleflight мягче, а stale-while-revalidate ещё мягче.

И от нескольких инстансов мьютекс не спасает вообще: каждый сходит в базу сам. Если за кэшем что-то дорогое, нужен SET NX.

А у вас как?

Информация

В рейтинге
1 289-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Архитектор программного обеспечения
Ведущий