Springboot使用Redis進行資料快取
阿新 • • 發佈:2018-12-19
1.以往都是在後臺直接讀取資料庫,如果操作過快會給資料庫不小的壓力,因此java引入了非關係型資料庫Redis進行資料快取,減輕了資料庫的負擔!
使用測試Redis非關係型資料庫,通過查詢關係型資料庫,檢視Redis快取情況
首先引入pom.xml中的依賴:
//jsa依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> //Redis依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version>
2.JPA連線Mysql資料庫讀取資料
public interface UserJPA extends JpaRepository<UserEntity,Long> {
//繼承的JpaRepository介面內部又繼承了PagingAndSortingRepository介面
// 以及QueryByExampleExecutor介面
}
註釋:UserEntity是實體類
3.Service層
@Transactional//新增事務管理 @Service @CacheConfig(cacheNames = "user") //開啟宣告的類參與快取,如果方法內的@Cacheable註解沒有key值,會自動使用cacheNames配置引數並且追加方法名 public class UserService { @Autowired private UserJPA userJPA; //@Cacheable配置方法的快取引數,可以自定義快取的key以及value @Cacheable public List<UserEntity> list(){ return userJPA.findAll(); } }
4.controller層
@ResponseBody
@RequestMapping(value = "/list")
public List<UserEntity> cutPage(){
return userService.list();
}
5.application.properties中配置Redis引數
# REDIS (RedisProperties)配置檔案 # Redis資料庫索引(預設為0) spring.redis.database=0 # Redis伺服器地址 spring.redis.host=127.0.0.1 # Redis伺服器連線埠 spring.redis.port=6379 # Redis伺服器連線密碼(預設為空) spring.redis.password= # 連線池最大連線數(使用負值表示沒有限制) spring.redis.pool.max-active=8 # 連線池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 # 連線池中的最大空閒連線 spring.redis.pool.max-idle=8 # 連線池中的最小空閒連線 spring.redis.pool.min-idle=0 # 連線超時時間(毫秒) spring.redis.timeout=0
6.設定Redis專案支援快取
@Configuration
@EnableCaching//開啟專案支援快取
public class RedisConfiguration extends CachingConfigurerSupport {
/**
* 採用RedisCacheManager作為快取管理器
* @param redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate){
//返回值使用了Redis快取管理器
//springboot專案啟動時就會找自定義配置的CacheManager物件,並且自動應用到專案中
return new RedisCacheManager(redisTemplate);
}
// *
// * 自定義生成key的規則
// * @return
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
//格式化快取key字串
StringBuilder stringBuilder=new StringBuilder();
//追加類名
stringBuilder.append(target.getClass().getName());
//追加方法名
stringBuilder.append(method.getName());
//遍歷引數並且追加
for (Object obj:params){
stringBuilder.append(obj.toString());
}
System.out.printf("呼叫Redis快取key:"+stringBuilder.toString());
return stringBuilder.toString();
}
};
}
註釋:自定義key規則可能會報錯
開啟Redis檢視