這是篇文章是建立在上一篇文章基礎(chǔ)之上的,前面講了使用SpringBoot并集成了jpa佃扼、swagger2激涤、logging,這篇文章將講述在此基礎(chǔ)上集成redis緩存
Redis緩存
? Redis是很好的緩存框架累提,支持集群尘喝。在很多系統(tǒng)中為了提升高并發(fā)業(yè)務(wù)的體驗(yàn),都會(huì)使用緩存框架斋陪,例如各式各樣的秒殺系統(tǒng)朽褪。
第1步,在服務(wù)器上安裝redis
? 因?yàn)槲耶?dāng)前使用的電腦是windows的无虚,所以我就只講講在windows上redis的安裝了缔赠,
到redis-windows-x64.3.2.100下載zip包到電腦上并解壓7
-
使用cmd配置服務(wù),cd到redis-windows-x64.3.2.100目錄下骑科,執(zhí)行以下代碼橡淑,在系統(tǒng)服務(wù)列表中就可以看到redis服務(wù)了
redis-server --service-install redis.windows-service.conf --loglevel verbose
-
可以在系統(tǒng)服務(wù)列表中啟動(dòng)或停止redis服務(wù),也可以cd到redis-windows-x64.3.2.100目錄下執(zhí)行以下命令
redis-server --service-start//啟動(dòng) redis-server --service-stop//停止 redis-server --service-uninstall//卸載
第2步咆爽,在application.yml中配制redis服務(wù)器信息
? 在application.yml中配制redis服務(wù)器的地址梁棠、端口號(hào)乖參數(shù)
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://220.192.168.231:3306/test
username: root
password: 123456
initialSize: 5
minIdle: 5
maxActive: 20
jpa:
hibernate:
ddl-auto: update
naming:
strategy: org.hibernate.cfg.ImprovedNamingStrategy
show-sql: true
database: mysql
redis:
database: 0
host: localhost
port: 6379
pool:
max-idle: 8
max-active: 8
max-wait: -1
min-idle: 0
第3步,在java文件配制緩存
? 在config包下新建RedisCacheConfig.java斗埂,繼承CachingConfigurerSupport符糊,具體內(nèi)容如下:
/**
* Name:RedisCacheConfig
* Description:
* Author:leix
* Time: 2017/4/10 13:48
*/
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
@Autowired
private JedisConnectionFactory jedisConnectionFactory;
@Bean
public RedisTemplate redisTemplate() {
StringRedisTemplate template = new StringRedisTemplate(jedisConnectionFactory);
//定義key序列化方式
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
//定義value的序列化方式
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.setKeySerializer(redisSerializer);
template.setHashKeySerializer(redisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisSerializer keySerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setHashKeySerializer(keySerializer);
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
return cacheManager;
}
@Bean
@Override
public KeyGenerator keyGenerator() {
return (target, method, objects) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(":" + method.getName() + ":");
for (Object obj : objects) {
sb.append(obj.toString());
}
return sb.toString();
};
}
}
? jedisConnectionFactory會(huì)提示“could not autowire.no beans of JedisConnectionFactory”,我測(cè)試了這個(gè)不影響運(yùn)行呛凶。
第4步男娄,在需要緩存的方法上添加緩存注解
@Service
@Transactional
public class CityServiceImpl implements CityService {
@Autowired
CityRepository cityRepository;
@Override
@Cacheable(value = "city")
public City findById(int id) {
return cityRepository.findById(id);
}
}
這里可能有個(gè)小問題,我怎么知道緩存是否配制成功了呢漾稀?答案是可以通過日志來判定模闲,在swagger-ui.html界面上,對(duì)一個(gè)服務(wù)測(cè)試崭捍,如果沒有緩存的話尸折,會(huì)一直看到sql執(zhí)行的日志,如果有緩存的話只會(huì)在第一次執(zhí)行時(shí)有sql執(zhí)行操作
詳細(xì)代碼來看這里看這里吧殷蛇!源碼@github