RedisConfig.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package org.example.music.config;
  2. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  3. import com.fasterxml.jackson.annotation.PropertyAccessor;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import org.springframework.cache.CacheManager;
  6. import org.springframework.cache.annotation.CachingConfigurerSupport;
  7. import org.springframework.cache.annotation.EnableCaching;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  11. import org.springframework.data.redis.cache.RedisCacheManager;
  12. import org.springframework.data.redis.connection.RedisConnectionFactory;
  13. import org.springframework.data.redis.core.RedisTemplate;
  14. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  15. import org.springframework.data.redis.serializer.RedisSerializationContext;
  16. import org.springframework.data.redis.serializer.RedisSerializer;
  17. import org.springframework.data.redis.serializer.StringRedisSerializer;
  18. import java.time.Duration;
  19. @EnableCaching //开启缓存注解
  20. @Configuration
  21. public class RedisConfig extends CachingConfigurerSupport {
  22. @Bean
  23. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
  24. RedisTemplate<String, Object> template = new RedisTemplate<>();
  25. RedisSerializer<String> redisSerializer = new StringRedisSerializer();
  26. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  27. ObjectMapper om = new ObjectMapper();
  28. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  29. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  30. jackson2JsonRedisSerializer.setObjectMapper(om);
  31. template.setConnectionFactory(factory);
  32. //key序列化方式
  33. template.setKeySerializer(redisSerializer);
  34. //value序列化
  35. template.setValueSerializer(jackson2JsonRedisSerializer);
  36. //value hashmap序列化
  37. template.setHashValueSerializer(jackson2JsonRedisSerializer);
  38. return template;
  39. }
  40. @Bean
  41. public CacheManager cacheManager(RedisConnectionFactory factory) {
  42. RedisSerializer<String> redisSerializer = new StringRedisSerializer();
  43. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  44. //解决查询缓存转换异常的问题
  45. ObjectMapper om = new ObjectMapper();
  46. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  47. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  48. jackson2JsonRedisSerializer.setObjectMapper(om);
  49. // 配置序列化(解决乱码的问题),过期时间600秒
  50. RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
  51. .entryTtl(Duration.ofSeconds(600))
  52. .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
  53. .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
  54. .disableCachingNullValues();
  55. return RedisCacheManager.builder(factory)
  56. .cacheDefaults(config)
  57. .build();
  58. }
  59. }