基礎(chǔ)配置
1.mvn坐標
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置文件
spring:
# redis相關(guān)配置
redis:
database: 0
host: 127.0.0.1
port: 6379
jedis:
pool:
# 連接池最大連接數(shù)(使用負值表示沒有限制)
max-active: 8
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
max-wait: -1ms
# 連接池中的最大空閑連接
max-idle: 8
# 連接池中的最小空閑連接
min-idle: 0
# 連接超時時間(毫秒)默認是2000ms
timeout: 2000ms
cache:
redis:
## 過期時間 ,這里注意如果使用默認的 RedisCacheManager 陪著對象 過期時間需要加上單位妖碉,因為這里的注入類型是 Duration另锋,本示例使用的是自定義所以沒有寫單位
time-to-live: 3000
#寫入redis時是否使用鍵前綴妇多。
use-key-prefix: true
key-prefix: test
Java代碼
1.config類
@Value("${spring.cache.redis.time-to-live}")
private Long defaultExpireTime ;
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
// 設(shè)置緩存管理器管理的緩存的默認過期時間
defaultCacheConfig = defaultCacheConfig
.entryTtl(Duration.ofSeconds(defaultExpireTime))
// 設(shè)置 key為string序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// 設(shè)置value為json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
// 不緩存空值
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(defaultCacheConfig)
.build();
return cacheManager;
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// 創(chuàng)建一個模板類
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
// 設(shè)置key的序列化器
template.setKeySerializer(new StringRedisSerializer());
// 設(shè)置value
template.setValueSerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new StringRedisSerializer());
// 將剛才的redis連接工廠設(shè)置到模板類中
template.setConnectionFactory(redisConnectionFactory);
// 設(shè)置value的序列化器
//使用Jackson 2焕议,將對象序列化為JSON
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json轉(zhuǎn)對象類拧烦,不設(shè)置默認的會將json轉(zhuǎn)成hashmap
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
1.config類
@Cacheable(value = "userCache", key = "#root.targetClass.getName() +':'+ #root.methodName + #id ")
@GetMapping("/t")
public String t1(String id) {
return "t";
}
具體參數(shù)含義參照springEL表達式