[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-keshirovanie-chto-takoe-redis-i-kogda-ego-ispolzovat":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":20,"progress":21,"seo":22},180,"chto-takoe-redis-i-kogda-ego-ispolzovat",5,"keshirovanie","Кеширование","⚡","Что такое Redis и когда его использовать?","Redis (Remote Dictionary Server) — это in-memory key-value хранилище данных, используемое как кэш, брокер сообщений и база данных, обеспечивающее latency менее 1 мс за счёт хранения данных в оперативной памяти.\n\n> **Аналогия из жизни:** Redis — это как блокнот на рабочем столе: информация записана прямо перед глазами и доступна мгновенно, в отличие от папок в архиве (БД), до которых нужно идти.\n\n### Когда использовать Redis\n\n- Распределённый кэш (несколько экземпляров приложения)\n- Сессии пользователей (вместо sticky sessions)\n- Rate limiting (ограничение запросов)\n- Распределённые блокировки (distributed locks)\n- Очереди задач (Redis Streams)\n- Pub\u002FSub (уведомления в реальном времени)\n- Leaderboards, счётчики (атомарные операции)\n\n### Redis vs Memcached\n\n| Критерий | Redis | Memcached |\n|----------|-------|-----------|\n| Структуры данных | String, List, Set, Hash, Sorted Set, Stream и др. | Только String |\n| Персистентность | RDB снимки, AOF лог | Нет |\n| Репликация | Master-Replica, Cluster | Нет |\n| Pub\u002FSub | Да | Нет |\n| Lua-скрипты | Да | Нет |\n| Размер значения | 512 MB | 1 MB |\n| Многопоточность | Один поток (I\u002FO threads с 6.0) | Многопоточный |\n\n### Конфигурация подключения в Spring Boot\n\n```yaml\nspring:\n  data:\n    redis:\n      host: localhost\n      port: 6379\n      password: secret\n      timeout: 2000ms\n      lettuce:\n        pool:\n          max-active: 16\n          max-idle: 8\n          min-idle: 4\n```\n\n### Работа с Redis через RedisTemplate\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@Service\npublic class RedisService {\n    private final StringRedisTemplate redisTemplate;\n\n    \u002F\u002F Простое key-value\n    public void cacheUser(Long id, String json) {\n        redisTemplate.opsForValue().set(\"user:\" + id, json, Duration.ofMinutes(10));\n    }\n\n    public String getCachedUser(Long id) {\n        return redisTemplate.opsForValue().get(\"user:\" + id);\n    }\n\n    \u002F\u002F Hash — отдельные поля объекта\n    public void cacheUserFields(Long id, Map\u003CString, String> fields) {\n        redisTemplate.opsForHash().putAll(\"user:\" + id, fields);\n        redisTemplate.expire(\"user:\" + id, Duration.ofMinutes(10));\n    }\n\n    \u002F\u002F Sorted Set — leaderboard\n    public void addScore(String player, double score) {\n        redisTemplate.opsForZSet().add(\"leaderboard\", player, score);\n    }\n\n    public Set\u003CString> getTopPlayers(int count) {\n        return redisTemplate.opsForZSet().reverseRange(\"leaderboard\", 0, count - 1);\n    }\n\n    \u002F\u002F Distributed lock (простой вариант)\n    public boolean acquireLock(String key, Duration timeout) {\n        return Boolean.TRUE.equals(\n            redisTemplate.opsForValue().setIfAbsent(\"lock:\" + key, \"1\", timeout));\n    }\n\n    public void releaseLock(String key) {\n        redisTemplate.delete(\"lock:\" + key);\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Архитектура Redis\n\n- **Однопоточный основной цикл** — атомарность операций гарантирована без блокировок\n- **Вся БД в RAM** — быстро, но ограничено объёмом памяти\n- **Redis Cluster** — горизонтальное масштабирование (шардирование по ключам)\n- **Redis Sentinel** — автоматический failover (master-replica)\n\n### Частые ошибки\n\n- **Хранить в Redis данные без TTL** — память исчерпается; всегда устанавливайте TTL\n- **Большие значения (>100 KB)** — замедляют Redis; если нужно хранить большие объекты, используйте сжатие или ссылки\n- **Использовать Redis как primary database** — Redis не заменяет PostgreSQL; данные должны быть восстановимы из основной БД\n- **`KEYS *` в production** — блокирует Redis; используйте `SCAN` для итерации\n- **Распределённая блокировка через `SETNX`** — упрощённая реализация ненадёжна; используйте Redisson или Redlock\n\n### Как используется в 2026\n\n- Redis 7.x — стабильная production-версия; Redis Functions (замена Lua), ACL, multi-threading I\u002FO\n- Spring Data Redis + Lettuce — стандартный клиент (вместо Jedis)\n- Redis Stack — Redis + поиск (RediSearch), JSON (RedisJSON), Time Series\n- Managed Redis: AWS ElastiCache, Azure Cache for Redis, GCP Memorystore\n\n> **На собеседовании:** интервьюер ожидает, что вы знаете не только определение Redis, но и конкретные сценарии использования (кэш, сессии, блокировки, очереди). Частая ошибка — не знать отличия от Memcached и не упомянуть однопоточную модель.","","junior",[15,16,17,18,19],"spring-boot","key-value","distributed-cache","caching","redis",[],null,{"title":23,"description":24,"ogTitle":23,"ogDescription":25,"keywords":26,"schemaAnswer":35,"featuredSnippetReady":36},"Что такое Redis и когда его использовать — Gymterview","Что такое Redis, когда его применять: кэш, сессии, rate limiting, очереди. Сравнение Redis vs Memcached. Примеры работы с RedisTemplate в Spring Boot.","Redis: in-memory хранилище для кэша, сессий, очередей и блокировок. Сравнение с Memcached, примеры на Spring Boot.",[27,28,16,29,30,31,32,33,34],"Redis","кэш","Memcached","RedisTemplate","Spring Boot","distributed cache","распределённый кэш","Java","Redis (Remote Dictionary Server) — in-memory key-value хранилище с latency \u003C1 мс. Используется для распределённого кэша, сессий, rate limiting, distributed locks, очередей (Streams), Pub\u002FSub и счётчиков. В отличие от Memcached, поддерживает богатые структуры данных, персистентность (RDB\u002FAOF), репликацию и кластеризацию.",true]