這是篇文章是建立在上一篇文章基礎之上的,前面講了使用SpringBoot并集成了jpa、swagger2、logging,這篇文章將講述在此基礎上集成redis緩存
Redis緩存
? Redis是很好的緩存框架,支持集群。在很多系統中為了提升高并發業務的體驗,都會使用緩存框架,例如各式各樣的秒殺系統。
第1步,在服務器上安裝redis
? 因為我當前使用的電腦是windows的,所以我就只講講在windows上redis的安裝了,
到redis-windows-x64.3.2.100下載zip包到電腦上并解壓7
-
使用cmd配置服務,cd到redis-windows-x64.3.2.100目錄下,執行以下代碼,在系統服務列表中就可以看到redis服務了
redis-server --service-install redis.windows-service.conf --loglevel verbose
-
可以在系統服務列表中啟動或停止redis服務,也可以cd到redis-windows-x64.3.2.100目錄下執行以下命令
redis-server --service-start//啟動 redis-server --service-stop//停止 redis-server --service-uninstall//卸載
第2步,在application.yml中配制redis服務器信息
? 在application.yml中配制redis服務器的地址、端口號乖參數
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,具體內容如下:
/**
* 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會提示“could not autowire.no beans of JedisConnectionFactory”,我測試了這個不影響運行。
第4步,在需要緩存的方法上添加緩存注解
@Service
@Transactional
public class CityServiceImpl implements CityService {
@Autowired
CityRepository cityRepository;
@Override
@Cacheable(value = "city")
public City findById(int id) {
return cityRepository.findById(id);
}
}
這里可能有個小問題,我怎么知道緩存是否配制成功了呢?答案是可以通過日志來判定,在swagger-ui.html界面上,對一個服務測試,如果沒有緩存的話,會一直看到sql執行的日志,如果有緩存的話只會在第一次執行時有sql執行操作
詳細代碼來看這里看這里吧!源碼@github