[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-keshirovanie-kak-nastroit-redis-v-spring-boot":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},182,"kak-nastroit-redis-v-spring-boot",5,"keshirovanie","Кеширование","⚡","Как настроить Redis в Spring Boot?","Настройка Redis в Spring Boot включает подключение зависимостей, конфигурацию соединения в `application.yml`, создание `RedisCacheManager` с настройками сериализации и TTL, и использование Spring Cache аннотаций.\n\n### Зависимости\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n    \u003CartifactId>spring-boot-starter-data-redis\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n    \u003CartifactId>spring-boot-starter-cache\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n### Конфигурация application.yml\n\n```yaml\nspring:\n  data:\n    redis:\n      host: ${REDIS_HOST:localhost}\n      port: ${REDIS_PORT:6379}\n      password: ${REDIS_PASSWORD:}\n  cache:\n    type: redis\n    redis:\n      time-to-live: 600000       # 10 минут (мс)\n      cache-null-values: false   # не кэшировать null\n      key-prefix: \"myapp:\"      # префикс для всех ключей\n```\n\n### Java-конфигурация RedisCacheManager\n\nГибкая настройка TTL по кэшам:\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@Configuration\n@EnableCaching\npublic class RedisCacheConfig {\n\n    @Bean\n    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {\n        \u002F\u002F Конфигурация по умолчанию\n        RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig()\n            .entryTtl(Duration.ofMinutes(10))\n            .disableCachingNullValues()\n            .serializeKeysWith(SerializationPair.fromSerializer(new StringRedisSerializer()))\n            .serializeValuesWith(SerializationPair.fromSerializer(\n                new GenericJackson2JsonRedisSerializer()));\n\n        \u002F\u002F Разный TTL для разных кэшей\n        Map\u003CString, RedisCacheConfiguration> cacheConfigs = Map.of(\n            \"users\",    defaultConfig.entryTtl(Duration.ofMinutes(30)),\n            \"products\", defaultConfig.entryTtl(Duration.ofHours(1)),\n            \"sessions\", defaultConfig.entryTtl(Duration.ofHours(24))\n        );\n\n        return RedisCacheManager.builder(connectionFactory)\n            .cacheDefaults(defaultConfig)\n            .withInitialCacheConfigurations(cacheConfigs)\n            .build();\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Использование через Spring Cache аннотации\n\n```java\n@Service\npublic class ProductService {\n\n    @Cacheable(value = \"products\", key = \"#id\")\n    public Product findById(Long id) {\n        return productRepository.findById(id).orElseThrow();\n    }\n\n    @CachePut(value = \"products\", key = \"#result.id\")\n    public Product update(Product product) {\n        return productRepository.save(product);\n    }\n\n    @CacheEvict(value = \"products\", key = \"#id\")\n    public void delete(Long id) {\n        productRepository.deleteById(id);\n    }\n}\n```\n\n### Ключевые моменты\n\n- `GenericJackson2JsonRedisSerializer` — сериализует объекты в JSON (читаемо в Redis CLI)\n- Разный TTL для разных кэшей — обязательно; справочники живут часами, пользовательские данные — минутами\n- Spring Boot auto-configures `LettuceConnectionFactory` — Lettuce предпочтительнее Jedis (non-blocking, reactive support)\n\n### Частые ошибки\n\n- **JDK сериализация (по умолчанию)** — нечитаемые бинарные данные в Redis; используйте JSON-сериализатор\n- **Один TTL для всех кэшей** — справочник товаров и токен авторизации требуют разных TTL\n- **Не указать `disableCachingNullValues()`** — null кэшируется и возвращается при следующем запросе\n- **Отсутствие key-prefix** — при нескольких приложениях на одном Redis ключи конфликтуют\n\n### Как используется в 2026\n\n- Spring Boot 3.x + Lettuce — стандартный стек\n- Redis Sentinel для HA, Redis Cluster для шардирования\n- Testcontainers с `GenericContainer\u003C>(\"redis:7\")` для интеграционных тестов\n\n> **На собеседовании:** интервьюер хочет увидеть, что вы настраивали Redis на практике, а не только читали документацию. Частая ошибка — забыть про JSON-сериализацию и разные TTL для разных кэшей.","","middle",[15,16,17,18,19],"configuration","spring-boot","caching","spring-cache","redis",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":36,"featuredSnippetReady":37},"Как настроить Redis в Spring Boot — Gymterview","Пошаговая настройка Redis в Spring Boot: зависимости, application.yml, RedisCacheManager с разным TTL, аннотации @Cacheable, @CachePut, @CacheEvict.","Настройка Redis в Spring Boot: конфигурация и аннотации — Gymterview","Полное руководство по настройке Redis в Spring Boot: зависимости, YAML-конфиг, RedisCacheManager, JSON-сериализация и аннотации кэширования.",[28,29,30,31,32,33,34,35],"Redis Spring Boot","настройка Redis","RedisCacheManager","Cacheable","CachePut","CacheEvict","Lettuce","spring-boot-starter-data-redis","Добавить spring-boot-starter-data-redis и spring-boot-starter-cache. Настроить host\u002Fport\u002Fpassword в application.yml. Создать RedisCacheManager с GenericJackson2JsonRedisSerializer для JSON-сериализации и разным TTL для разных кэшей. Использовать @EnableCaching и аннотации @Cacheable, @CachePut, @CacheEvict. Spring Boot автоматически настраивает LettuceConnectionFactory.",true]