девелопня
612 subscribers
157 photos
13 videos
126 links
мой тг t.me/renatmd5
сообщество - https://t.me/flowwwgarden
Download Telegram
Forwarded from Fedkin is thinking
⚡️Cache stampede

Представим, код метода getData() выглядит так

def getData():
dataFromCache = getFromCache()
if dataFromCache:
return dataFromCache
dataFromDb = getFromDb()
updateCache(dataFromDb)
return dataFromDb


Что произойдет если два потока почти одновременно не найдут данные в кеше? Пойдут загружать из БД

А если 100 потоков?

Понять масштабы можно на таком примере:
- В кеш может поступать до 300 запросов в секунду
- Время загрузки из бд — 2 секунды

И получается, если ключ в кеше протухнет, то за первые две секунды в базу попрутся 600 параллельных тяжелых запросов. Учитывая, что из-за этих запросов БД может деградировать, запросы могут начать выполняться еще дольше

---

Что с этим делать?

1. Локи

В примере выше хорошо бы зашел double-checked locking

def getData():
dataFromCache = getFromCache()
if dataFromCache:
return dataFromCache
withLock {
dataFromCache = getFromCache()
if dataFromCache:
return dataFromCache
dataFromDb = getFromDb()
updateCache(dataFromDb)
return dataFromDb
}


Можно конечно сразу лочить, но тогда для подавляющего большинства запросов добавится лишний оверхед. А в случае дабл чека будет лочиться только когда кеш протух

2. Прогрев кеша / фоновые апдейты

Если уверены, что значение скорее всего понадобится, то просто заранее его туда положите и в фоне обновляйте. Если будет всплеск нагрузки, в кеше уже будет все что нужно

3. Вероятностные рефреши

Есть еще техника, когда кеш обновляется с некоторой вероятностью, даже если значение еще не протухло. Это может быть полезно, если полностью прогреть кеш невозможно, но вероятность cache stampede хочется снизить

---

Пишите в комментах, что из этого используете)
15
видос ин прогресс
завоз качества будет!
94
видос мега имба, щас грузить?
167🔥2
макс саппорт!!!
чьи пацаны?
2611🔥62
следующий видос не заставит себя ждать, и вы ахуеете я обещаю
1153
сначала мужчина говорит что у него нет депрессии
а потом😭
18
пашок😭
RIP
😢29
КУДА ЭТОТ МИР КАТИТСЯ
14
ребяткиии, раскидаюсь с делами и сразу к вам
блес мне
20
🕊️🕊️
8
митинг застал незаметно
27😢2🔥1
хочу больше общаться с классными ребятами

в очередной раз прихожу к тому, что человеческий ресурс - это тот самый нескончаемый капитал который у нас есть.
окружение это и есть мы и бла бла.

короч мне нужен именно ты, го общаться :3

flowgarden - комьюнити для классных ребят, и сейфспейс для меня и вас. заходи, го чатица йоу
🥰13
первый созвон в flow garden!

йоу ребятки, в эту субботу хочу устроить созвон с вами
пообщаться о планах, работе и вообще о чем угодно
созвон будет проходить в самом чатике, так что подписывайся блин

24.05 20:00 МСК FC DC xd

https://t.me/flowwwgarden
https://t.me/flowwwgarden
https://t.me/flowwwgarden
🔥10
АЙТИШНАЯ СВОЯ ИГРА

В эту субботу у нас пройдёт айтишная своя игра на стриме
В гостях у нас будут такие легенды: @go2_it, @tokarev_gregor, @scv3lp

НО ЭТО НЕ ВСЕ! Мы разыгрываем еще один слот на наш ивентик. Просто жми участвовать, а для участия подпишись на @flowwwgarden и @developnya

31 число 19:00
9🥰3🔥2