[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-keshirovanie-chto-takoe-keshirovanie-i-zachem-ono-nuzhno":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},178,"chto-takoe-keshirovanie-i-zachem-ono-nuzhno",5,"keshirovanie","Кеширование","⚡","Что такое кэширование и зачем оно нужно?","Кэширование — это механизм хранения результатов дорогих операций (запросы к БД, вычисления, вызовы внешних API) в быстром промежуточном хранилище для повторного использования без повторного вычисления.\n\n> **Аналогия из жизни:** кэш — это как закладка в книге. Вместо того чтобы каждый раз листать с начала до нужной страницы, вы открываете книгу сразу в нужном месте. Закладка занимает мало места, но экономит время.\n\n### Зачем нужно кэширование\n\n- **Снижение latency** — чтение из памяти (~1 мкс) вместо чтения из БД (~1-10 мс) или вызова API (~50-500 мс)\n- **Снижение нагрузки** на БД и внешние сервисы\n- **Повышение throughput** — один экземпляр приложения может обслуживать больше запросов\n\n### Уровни кэширования\n\n```\nКлиент (браузер)  →  CDN  →  API Gateway  →  Приложение (L1 in-memory)  →  Распределённый кэш (L2 Redis)  →  БД\n```\n\n| Уровень | Хранилище | Latency | Примеры |\n|---------|-----------|---------|---------|\n| Браузер | HTTP Cache | 0 мс (локально) | Cache-Control, ETag |\n| CDN | Edge-серверы | 5-50 мс | CloudFront, Cloudflare |\n| API Gateway | Встроенный кэш | 1-5 мс | Nginx, Spring Cloud Gateway |\n| Приложение (L1) | Heap JVM | \u003C1 мс | Caffeine, Guava, ConcurrentHashMap |\n| Распределённый (L2) | Redis, Memcached | 1-5 мс | Spring Data Redis |\n| БД | Query Cache | 1-10 мс | PostgreSQL, MySQL |\n\n### Что кэшировать\n\n- Результаты частых и одинаковых запросов (справочники, каталоги, профили)\n- Результаты дорогих вычислений (агрегации, отчёты)\n- Ответы внешних API (курсы валют, геолокация)\n- Сессии пользователей, токены\n\n### Что НЕ кэшировать\n\n- Часто обновляемые данные (баланс счёта, инвентарь в реальном времени)\n- Уникальные данные (каждый запрос уникален — кэш не помогает)\n- Конфиденциальные данные (без шифрования)\n\n### Ключевые принципы\n\n- Кэширование — это компромисс: ускорение за счёт возможной неактуальности данных\n- Два главных вопроса: что кэшировать и когда инвалидировать\n- «There are only two hard things in computer science: cache invalidation and naming things» — Phil Karlton\n\n### Частые ошибки\n\n- **Кэширование всего подряд** — кэш с hit rate \u003C 50% потребляет память без пользы\n- **Отсутствие TTL** — данные в кэше вечно устаревшие\n- **Кэширование null-результатов без осознания** — повторные запросы несуществующих ресурсов не доходят до БД, но кэш растёт\n- **Не мониторить hit\u002Fmiss ratio** — без метрик невозможно оценить эффективность\n\n### Как используется в 2026\n\n- Кэширование — обязательная часть production-системы\n- Redis — стандарт для распределённого кэша\n- Caffeine — стандарт для in-process кэша\n- Spring Cache абстракция — декларативный подход через аннотации\n\n> **На собеседовании:** интервьюер хочет услышать не только определение, но и понимание компромиссов: кэш ускоряет, но создаёт проблему актуальности данных. Частая ошибка — забыть упомянуть уровни кэширования и сказать только про Redis.","","junior",[15,16,17,18],"performance","latency","caching","architecture",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"Что такое кэширование и зачем оно нужно — Gymterview","Узнайте, что такое кэширование, какие уровни кэширования существуют (браузер, CDN, приложение, Redis), что кэшировать и какие ошибки избегать на собеседовании.","Разбираем уровни кэширования, что стоит и не стоит кэшировать, типичные ошибки. Подготовка к Java-собеседованию.",[26,27,16,28,29,30,31,32,33],"кэширование","cache","производительность","Redis","Caffeine","in-memory","Java","собеседование","Кэширование — хранение результатов дорогих операций (запросы к БД, вычисления, внешние API) в быстром хранилище для повторного использования. Снижает latency (чтение из памяти ~1 мкс вместо БД ~1-10 мс), уменьшает нагрузку на БД и повышает throughput. Уровни: браузер, CDN, API Gateway, приложение (Caffeine), распределённый кэш (Redis), БД.",true]