1. pom.xml引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. RedisConfig 配置
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(2 * 60);
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
setJsonSerializer(template);
template.afterPropertiesSet();
return template;
}
private void setJsonSerializer(StringRedisTemplate template) {
StringRedisSerializer redisSerializer = new StringRedisSerializer();
template.setKeySerializer(redisSerializer);
template.setHashKeySerializer(redisSerializer);
@SuppressWarnings({"rawtypes", "unchecked"})
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
}
}
3. Service层使用
@Service
@CacheConfig(cacheNames="cityCache")
@Transactional
public class CityServiceImpl extends AbstractService<City> implements CityService {
private Logger log = LoggerFactory.getLogger(CityServiceImpl.class);
@Autowired
private CityMapper cityMapper;
@CachePut(key="'cityId:' + #p0.id")
public City insert(City city){
cityMapper.insert(city);
return cityMapper.selectByPrimaryKey(city.getId());
}
@CachePut(key="'cityId:' + #p0.id")
public City updateCity(City city){
cityMapper.updateByPrimaryKeySelective(city);
return cityMapper.selectByPrimaryKey(city.getId());
}
@Cacheable(key="'cityId:' + #p0")
public City find(Integer id){
log.info("根据id=" + id +"获取用户对象,从数据库中获取");
return cityMapper.selectByPrimaryKey(id);
}
public List<City> findAll() {
return cityMapper.selectAll();
}
@CacheEvict(key="'cityId:' + #p0")
public void delete(Integer id){
cityMapper.deleteByPrimaryKey(id);
}
@CacheEvict(allEntries = true)
public void deleteAll(){
}
}