springboot2.x集成redis

引入必须的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

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!