[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-keshirovanie-kakie-politiki-vytesneniya-eviction-sushchestvuyut":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":21,"progress":22,"seo":23},189,"kakie-politiki-vytesneniya-eviction-sushchestvuyut",5,"keshirovanie","Кеширование","⚡","Какие политики вытеснения (eviction) существуют?","Политика вытеснения — это алгоритм, определяющий, какой элемент удалить из кэша, когда он заполнен и нужно освободить место для новых данных.\n\n> **Аналогия из жизни:** политика вытеснения — как правила уборки книжной полки, когда она заполнена. LRU убирает книгу, которую дольше всего не открывали. LFU убирает ту, которую открывали реже всего за всё время. FIFO убирает ту, что стоит дольше всего.\n\n### Основные алгоритмы\n\n| Политика | Алгоритм | Плюсы | Минусы |\n|----------|----------|-------|--------|\n| **LRU** (Least Recently Used) | Удаляет давно не использованный | Простой, хороший hit rate | Не учитывает частоту |\n| **LFU** (Least Frequently Used) | Удаляет редко используемый | Учитывает популярность | Залипание старых популярных элементов |\n| **FIFO** (First In First Out) | Удаляет самый старый | Очень простой | Не учитывает паттерн доступа |\n| **Random** | Удаляет случайный | Простой, O(1) | Может удалить горячий элемент |\n| **W-TinyLFU** (Caffeine) | LFU с окном + фильтром | Лучший hit rate | Сложная реализация |\n\n### LRU (используется в Redis, LinkedHashMap)\n\n```java\n\u002F\u002F Java: LRU-кэш на LinkedHashMap\nMap\u003CString, String> lruCache = new LinkedHashMap\u003C>(100, 0.75f, true) {\n    @Override\n    protected boolean removeEldestEntry(Map.Entry\u003CString, String> eldest) {\n        return size() > 100; \u002F\u002F удалять при превышении 100 элементов\n    }\n};\n```\n\n### Redis eviction policies\n\n```\n# redis.conf\nmaxmemory 256mb\nmaxmemory-policy allkeys-lru   # LRU среди всех ключей\n```\n\n| Политика Redis | Описание |\n|---------------|----------|\n| `noeviction` | Ошибка при нехватке памяти (по умолчанию) |\n| `allkeys-lru` | LRU среди всех ключей |\n| `volatile-lru` | LRU среди ключей с TTL |\n| `allkeys-lfu` | LFU среди всех ключей (Redis 4.0+) |\n| `volatile-lfu` | LFU среди ключей с TTL |\n| `allkeys-random` | Случайный среди всех |\n| `volatile-ttl` | Удалять ключи с ближайшим истечением TTL |\n\n### W-TinyLFU (Caffeine)\n\nCaffeine использует Window TinyLFU — гибрид LRU и LFU с Bloom-фильтром для отслеживания частоты. Обеспечивает near-optimal hit rate с минимальными затратами памяти.\n\n```java\nCaffeine.newBuilder()\n    .maximumSize(10_000)  \u002F\u002F при превышении — W-TinyLFU решает, что удалить\n    .build();\n```\n\n### Ключевые принципы\n\n- **LRU** — хорош для большинства случаев; используется в Redis (`allkeys-lru`)\n- **W-TinyLFU** (Caffeine) — лучший hit rate среди in-process кэшей; рекомендуется для L1\n- Redis `allkeys-lru` — рекомендуемая политика для кэша; `noeviction` — для persistent storage\n- `volatile-*` политики работают только с ключами, у которых установлен TTL\n\n### Частые ошибки\n\n- **Redis `noeviction` для кэша** — при заполнении памяти Redis начнёт отдавать ошибки вместо вытеснения\n- **LFU без decay** — старые популярные ключи залипают навсегда; Redis LFU использует логарифмический decay\n- **Не установить `maxmemory` в Redis** — Redis будет расти до OOM kill ОС\n\n### Как используется в 2026\n\n- Redis: `allkeys-lru` или `allkeys-lfu` — стандартная конфигурация для кэша\n- Caffeine: W-TinyLFU по умолчанию — лучший in-process алгоритм\n- Мониторинг eviction rate — если высокий, нужно увеличить `maximumSize` или `maxmemory`\n\n> **На собеседовании:** интервьюер ожидает знание LRU, LFU и W-TinyLFU, а также умение выбрать правильную политику Redis. Частая ошибка — не знать, что `noeviction` стоит по умолчанию в Redis и не подходит для кэша.","","middle",[15,16,17,18,19,20],"eviction","lfu","caching","lru","redis","w-tinylfu",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":38,"featuredSnippetReady":39},"Какие политики вытеснения (eviction) существуют — Gymterview","Политики вытеснения кэша: LRU, LFU, FIFO, Random, W-TinyLFU. Eviction policies в Redis (allkeys-lru, allkeys-lfu, volatile). Caffeine и LinkedHashMap примеры.","Политики вытеснения кэша: LRU, LFU, W-TinyLFU и Redis eviction — Gymterview","Обзор политик вытеснения: LRU, LFU, FIFO, W-TinyLFU. Конфигурация Redis maxmemory-policy и Caffeine maximumSize.",[29,30,31,32,33,34,35,36,37],"eviction policy","политика вытеснения","LRU","LFU","FIFO","W-TinyLFU","Redis maxmemory-policy","Caffeine","allkeys-lru","Основные политики: LRU (удаляет давно не использованный, используется в Redis), LFU (удаляет редко используемый), FIFO (удаляет самый старый), Random (случайный, O(1)), W-TinyLFU (гибрид LRU+LFU с Bloom-фильтром, используется в Caffeine, лучший hit rate). Redis поддерживает: noeviction, allkeys-lru, volatile-lru, allkeys-lfu, volatile-lfu, allkeys-random, volatile-ttl. Рекомендуется allkeys-lru для кэша.",true]