RedisCacheConfig.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.zsElectric.boot.config;
  2. import org.springframework.boot.autoconfigure.cache.CacheProperties;
  3. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  4. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  9. import org.springframework.data.redis.cache.RedisCacheManager;
  10. import org.springframework.data.redis.cache.RedisCacheWriter;
  11. import org.springframework.data.redis.connection.RedisConnectionFactory;
  12. import org.springframework.data.redis.serializer.RedisSerializationContext;
  13. import org.springframework.data.redis.serializer.RedisSerializer;
  14. /**
  15. * Redis 缓存配置
  16. *
  17. * @author Ray.Hao
  18. * @since 2023/12/4
  19. */
  20. @EnableCaching
  21. @EnableConfigurationProperties(CacheProperties.class)
  22. @Configuration
  23. @ConditionalOnProperty(name = "spring.cache.enabled") // xxl.job.enabled = true 才会自动装配
  24. public class RedisCacheConfig {
  25. /**
  26. * 自定义 RedisCacheManager
  27. * <p>
  28. * 修改 Redis 序列化方式,默认 JdkSerializationRedisSerializer
  29. *
  30. * @param redisConnectionFactory {@link RedisConnectionFactory}
  31. * @param cacheProperties {@link CacheProperties}
  32. * @return {@link RedisCacheManager}
  33. */
  34. @Bean
  35. public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties){
  36. return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
  37. .cacheDefaults(redisCacheConfiguration(cacheProperties))
  38. .build();
  39. }
  40. /**
  41. * 自定义 RedisCacheConfiguration
  42. *
  43. * @param cacheProperties {@link CacheProperties}
  44. * @return {@link RedisCacheConfiguration}
  45. */
  46. @Bean
  47. RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
  48. RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
  49. config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string()));
  50. config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json()));
  51. CacheProperties.Redis redisProperties = cacheProperties.getRedis();
  52. if (redisProperties.getTimeToLive() != null) {
  53. config = config.entryTtl(redisProperties.getTimeToLive());
  54. }
  55. if (!redisProperties.isCacheNullValues()) {
  56. config = config.disableCachingNullValues();
  57. }
  58. if (!redisProperties.isUseKeyPrefix()) {
  59. config = config.disableKeyPrefix();
  60. }
  61. // 覆盖默认key双冒号 CacheKeyPrefix#prefixed
  62. config = config.computePrefixWith(name -> name + ":");
  63. return config;
  64. }
  65. }