RedisConfig.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package org.example.config;
  2. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  3. import com.fasterxml.jackson.annotation.JsonTypeInfo;
  4. import com.fasterxml.jackson.annotation.PropertyAccessor;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
  7. import org.springframework.cache.CacheManager;
  8. import org.springframework.cache.annotation.EnableCaching;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  12. import org.springframework.data.redis.cache.RedisCacheManager;
  13. import org.springframework.data.redis.connection.RedisConnectionFactory;
  14. import org.springframework.data.redis.core.RedisTemplate;
  15. import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
  16. import org.springframework.data.redis.serializer.RedisSerializationContext;
  17. import org.springframework.data.redis.serializer.StringRedisSerializer;
  18. import java.time.Duration;
  19. /**
  20. * Redis配置类
  21. */
  22. @Configuration
  23. @EnableCaching
  24. public class RedisConfig {
  25. /**
  26. * 配置RedisTemplate
  27. */
  28. @Bean
  29. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
  30. RedisTemplate<String, Object> template = new RedisTemplate<>();
  31. template.setConnectionFactory(connectionFactory);
  32. // 使用StringRedisSerializer来序列化和反序列化redis的key值
  33. StringRedisSerializer stringSerializer = new StringRedisSerializer();
  34. template.setKeySerializer(stringSerializer);
  35. template.setHashKeySerializer(stringSerializer);
  36. // 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值
  37. GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();
  38. template.setValueSerializer(jsonSerializer);
  39. template.setHashValueSerializer(jsonSerializer);
  40. template.afterPropertiesSet();
  41. return template;
  42. }
  43. /**
  44. * 配置缓存管理器
  45. */
  46. @Bean
  47. public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
  48. // 配置序列化
  49. RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
  50. // 设置缓存过期时间为30分钟
  51. .entryTtl(Duration.ofMinutes(30))
  52. // 设置key的序列化方式
  53. .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
  54. // 设置value的序列化方式
  55. .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
  56. // 不缓存null值
  57. .disableCachingNullValues();
  58. return RedisCacheManager.builder(connectionFactory)
  59. .cacheDefaults(config)
  60. .build();
  61. }
  62. }