SpringBoot2.x 整合Redis和使用Redis緩存
導入依賴
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
以默認的方式(jdk序列化)存儲對象
配置序列化器,以json格式存儲
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
//配置Redistemplate
@Bean
public RedisTemplate<String, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替換默認序列化
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(objectMapper);
// 設置value的序列化規則和 key的序列化規則
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
//使用CacheManager緩存
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解決查詢緩存轉換異常的問題
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(om.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解決亂碼的問題),過期時間30秒
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(1800000))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
將Redis中的數據反序列化返回到前端頁面
編寫Controller
@RestController
public class EmployeeController {
/**
* 服務對象
*/
@Resource
private EmployeeService employeeService;
//@Autowired
//private RedisTemplate redisTemplate;
/**
* 通過主鍵查詢單條數據
*
* @param id 主鍵
* @return 單條數據
*/
@GetMapping("/emp/{id}")
@Cacheable(cacheNames = {"emp"}) //使用緩存
public Employee selectOne(@PathVariable("id") Integer id) {
System.out.println("查詢了"+id+"號員工");
return this.employeeService.queryById(id);
}
}
進行訪問
看控制台輸出
我們可以看出進行了數據庫的查詢
清空控制台,我們再次進行訪問
說明確實走了Redis緩存
本篇隨筆參考[SpringBoot2.x整合redis和使用redis緩存](https://www.cnblogs.com/Neil-learning/p/12637711.html)