引入必须的jar依
1 2 3 4 5
| <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency>
|
Redis config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| @Configuration @EnableCaching(order = 0) public class RedisConfig extends CachingConfigurerSupport { @Bean @Override public KeyGenerator keyGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(":").append(method.getName()); for (Object obj : params) { sb.append(":").append(obj.toString()); } return sb.toString(); }; }
@Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(10)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer())) .prefixCacheNameWith(JDMPConstants.REDIS_PREFIX);
// 设置一个初始化的缓存空间set集合 Set<String> cacheNames = new HashSet<>(); /*cacheNames.add("my-redis-cache1"); cacheNames.add("my-redis-cache2");*/ // 对每个缓存空间应用不同的配置 Map<String, RedisCacheConfiguration> configMap = new HashMap<>(); /*configMap.put("my-redis-cache1", redisCacheConfiguration); configMap.put("my-redis-cache2", redisCacheConfiguration.entryTtl(Duration.ofSeconds(120)));*/ return RedisCacheManager .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)) .initialCacheNames(cacheNames) .withInitialCacheConfigurations(configMap) .cacheDefaults(redisCacheConfiguration).build(); }
@Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer(); RedisSerializer stringSerializer = new StringRedisSerializer(); template.setEnableDefaultSerializer(false); template.setDefaultSerializer(stringSerializer); template.setKeySerializer(stringSerializer); template.setValueSerializer(fastJsonRedisSerializer); template.setHashKeySerializer(stringSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); template.afterPropertiesSet(); return template; } }
|
如果你用到了类似@cacheable之类的注解,那么需要注意CacheManager的实例化方式. spring2.x中对CacheManager的实例化和1.x有所变化.现在需要使用建造者模式去创建实例. 在初始化的时候可以传递序列化方式以及缓存的读写模式等. 同时可以针对不同的cache name有特定的配置
如果你使用redisTemplate来操作redis.按照上述方式配置相应的序列化方式.
yaml中的配置
2.x中默认使用的是letture进行redis的连接
配置:
1 2 3 4 5
| spring: redis: cluster: nodes: xxxx password: xxxx
|