您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

73 行
3.9 KiB

  1. package com.iformall.config;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.cache.CacheManager;
  5. import org.springframework.cache.annotation.CachingConfigurerSupport;
  6. import org.springframework.cache.annotation.EnableCaching;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  10. import org.springframework.data.redis.cache.RedisCacheManager;
  11. import org.springframework.data.redis.connection.RedisConnectionFactory;
  12. import java.time.Duration;
  13. import java.util.HashMap;
  14. import java.util.HashSet;
  15. import java.util.Map;
  16. import java.util.Set;
  17. /**
  18. * Created by Stormeye on 2018/10/1.
  19. */
  20. @Configuration
  21. @EnableCaching
  22. public class RedisConfig extends CachingConfigurerSupport {
  23. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  24. //缓存管理器
  25. @Bean
  26. public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
  27. /*
  28. //user信息缓存配置
  29. RedisCacheConfiguration userCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)).disableCachingNullValues().prefixKeysWith("user");
  30. Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
  31. redisCacheConfigurationMap.put("user", userCacheConfiguration);
  32. //初始化一个RedisCacheWriter
  33. RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
  34. // 设置CacheManager的值序列化方式为JdkSerializationRedisSerializer,但其实RedisCacheConfiguration默认就是使用StringRedisSerializer序列化key,JdkSerializationRedisSerializer序列化value,所以以下注释代码为默认实现
  35. // ClassLoader loader = this.getClass().getClassLoader();
  36. // JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);
  37. // RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer);
  38. // RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
  39. RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
  40. //设置默认超过期时间是30秒
  41. defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
  42. //初始化RedisCacheManager
  43. RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig, redisCacheConfigurationMap);
  44. return cacheManager;
  45. */
  46. RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
  47. config = config.entryTtl(Duration.ofMinutes(1)) // 设置缓存的默认过期时间,也是使用Duration设置
  48. .disableCachingNullValues(); // 不缓存空值
  49. // 设置一个初始化的缓存空间set集合
  50. Set<String> cacheNames = new HashSet<>();
  51. cacheNames.add("my-redis-cache1");
  52. cacheNames.add("my-redis-cache2");
  53. // 对每个缓存空间应用不同的配置
  54. Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
  55. configMap.put("my-redis-cache1", config);
  56. configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
  57. RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory) // 使用自定义的缓存配置初始化一个cacheManager
  58. .initialCacheNames(cacheNames) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
  59. .withInitialCacheConfigurations(configMap)
  60. .build();
  61. return cacheManager;
  62. }
  63. }