diff --git a/.obsidian/plugins/home-tab/data.json b/.obsidian/plugins/home-tab/data.json index 5a06f669..94e57abc 100644 --- a/.obsidian/plugins/home-tab/data.json +++ b/.obsidian/plugins/home-tab/data.json @@ -24,12 +24,16 @@ "unresolvedLinks": false, "recentFilesStore": [ { - "filepath": "_inbox/Кэширование.md", - "timestamp": 1718688838197 + "filepath": "Инвалидация кэша.md", + "timestamp": 1718688902451 }, { - "filepath": "Инвалидация кэша.md", - "timestamp": 1718688811143 + "filepath": "_inbox/Кэширование.md", + "timestamp": 1718688898521 + }, + { + "filepath": "Cache miss.md", + "timestamp": 1718688870602 }, { "filepath": "_inbox/Старт с холодным кэшом.md", @@ -38,10 +42,6 @@ { "filepath": "home/Вычеты/Вычет 2024.md", "timestamp": 1718688293724 - }, - { - "filepath": "_inbox/Перестройка кэша.md", - "timestamp": 1718688112432 } ], "bookmarkedFileStore": [], diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 059af799..ac99331f 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,12 +1,16 @@ { "recentFiles": [ + { + "basename": "Инвалидация кэша", + "path": "Инвалидация кэша.md" + }, { "basename": "Кэширование", "path": "_inbox/Кэширование.md" }, { - "basename": "Инвалидация кэша", - "path": "Инвалидация кэша.md" + "basename": "Cache miss", + "path": "Cache miss.md" }, { "basename": "Старт с холодным кэшом", @@ -195,10 +199,6 @@ { "basename": "Составные индексы в PostgreSQL", "path": "_inbox/Составные индексы в PostgreSQL.md" - }, - { - "basename": "00 PostgreSQL", - "path": "wiki/zero/00 PostgreSQL.md" } ], "omittedPaths": [], diff --git a/Cache miss.md b/Cache miss.md index 95ba96ea..83e1d296 100644 --- a/Cache miss.md +++ b/Cache miss.md @@ -1,7 +1,20 @@ -## Cache miss +--- +aliases: +tags: + - зрелость/🌱 +date: + - - 2024-06-18 +zero-link: + - "[[00 HighLoad]]" +parents: + - "[[Кэширование]]" +linked: +--- По формуле можно расчитать как часто мы будем промахиваться мимо кэша -AverageTime = CacheAccessTime + DbAccessTime \* CacheMissRate +``` +AverageTime = CacheAccessTime + DbAccessTime * CacheMissRate +``` - AverageTime - среднее время жизни кэша - CacheAccessTime - время доступа к кэшу - DbAccessTime - время доступа к БД diff --git a/_inbox/Кэширование.md b/_inbox/Кэширование.md index f2559297..48fff0c2 100644 --- a/_inbox/Кэширование.md +++ b/_inbox/Кэширование.md @@ -52,6 +52,8 @@ $key = md5(serialize($options)) ## Инвалидация кэша ![Инвалидация кэша](Инвалидация%20кэша.md) -[Cache miss](Cache%20miss.md) + +## Cache miss +![Cache miss](Cache%20miss.md) ## Дополнительные материалы - [Старт с холодным кэшом](Старт%20с%20холодным%20кэшом.md) \ No newline at end of file diff --git a/Инвалидация кэша.md b/Инвалидация кэша.md index d41de97a..fc177759 100644 --- a/Инвалидация кэша.md +++ b/Инвалидация кэша.md @@ -10,7 +10,6 @@ parents: - "[[Кэширование]]" linked: --- - Если мы закэшировали какие-то данные от backend’а, например, выборку из БД, рано или поздно исходные данные изменяются, и кэш перестает быть валидным. Причем очень желательно, чтобы кэш сбрасывался сразу же за изменением. Один из подходов это инвалидация по времени. Для кэшированных данных устанавливается TTL, и по прошествию времени кэш удаляется. Такое вариант подходит для редко изменяемых данных, устаревание которых не приводит к серьезным проблемам в бизнес-логике, например словари. При таком варианте важно подобрать оптимальное время жизни кэша, слишком маленькое время жизни будет давать плохую производительность, слишком большое ухудшит опыт пользователей. @@ -18,9 +17,10 @@ linked: Первый вариант не подходит. Некоторые чуствительные данные нужно инвалидировать их сразу при изменении. Тут может помочь тегирование ключей. **Способы инвалидации:** -- По истечению срока жизни - TTL. - - Самый простой способ. - - При малом TTL можно +- Задать срок жизни - TTL. + - Самая простая реализация. + - При малом TTL будет высокий [Cache miss](Cache%20miss.md) + - При большом TTL данные могут быть не консистентны - Принудительный вызов команды инвалидации. - Алгоритмы вытеснения