1.Spring緩存支持
Spring定義了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用來統(tǒng)一不同的緩存的技術(shù)猪半。其中餐胀,CacheManager是Spring提供的各種緩存技術(shù)抽象接口
使用方法:
@Bean
public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager) {
return new EhCacheCacheManager(ehCacheCacheManager);
}
2.聲名式緩存注解
@Cacheable贫母、@CachePut憋飞、@CacheEvit都有value屬性葛假,指定的是要使用的緩存名稱债热;key屬性指定的是
數(shù)據(jù)在緩存中的存儲的鍵形真。
3.開啟聲名式緩存支持
開啟聲名式緩存支持十分簡單,只需在配置類上使用@EnableCaching注解即可
@Configuration
@EnableCaching
public class AppConfig {
}
public interface UserInfoDao extends JpaRepository<UserInfo, Long> {
}
@Service
public class UserInfoServiceImpl implements UserInfoService {
private static Logger log = Logger.getLogger(String.valueOf(UserInfoServiceImpl.class));
@Autowired
UserInfoDao userInfoDao;
@Override
@CachePut(value = "userinfoentityManagerFactorycache",key="#userInfo.id") //@CachePut緩存新增的或更新的數(shù)據(jù)到緩存贞奋,其中緩存名稱為people赌厅,數(shù)據(jù)的key是person的id。
public UserInfo save(UserInfo userInfo) {
UserInfo u = userInfoDao.save(userInfo);
log.info("為userinfo的id(也是cache的key):" + u.getId() + "數(shù)據(jù)做了緩存");
return u;
}
@Override
@CacheEvict(value = "userinfocache") //@CacheEvict從緩存people中刪除key為id的數(shù)據(jù)忆矛。
public void remove(Long id) {
log.info("刪除了userinfo的id(也是cache的key):" + id + "數(shù)據(jù)緩存");
userInfoDao.deleteById(id);
}
@Override
@Cacheable(value = "userinfocache",key="#userInfo.id") //@Cacheable緩存key為person的id數(shù)據(jù)到緩存people中察蹲。
public UserInfo findOne(UserInfo userInfo) {
UserInfo u = userInfoDao.findOne();
log.info("為userinfo的id(也是cache的key):" + u.getId() + "數(shù)據(jù)做了緩存");
return u;
}
啟動類也要加上
@SpringBootApplication
@EnableCaching
public class SpringbootcacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootcacheApplication.class, args);
}
}
4.啟動、訪問催训,項目啟動后洽议,數(shù)據(jù)庫中會自動生成user_info的表(表明可以自定義)
1.添加一條數(shù)據(jù):
日志:
Hibernate: insert into user_info (address, age, name, sex) values (?, ?, ?, ?)
c.h.cache.userinfo.UserInfoServiceImpl : 為userinfo的id(也是cache的key):12數(shù)據(jù)做了緩存
2.再次訪問http://127.0.0.1:5000/userinfo/cache?id=12則控制臺沒有輸入。
3.測試remove
我們剛才已經(jīng)為id=12做了緩存漫拭,取id=12的值直接從緩存中讀取亚兄。
控制臺輸出:
c.h.cache.userinfo.UserInfoServiceImpl : 刪除了userinfo的id(也是cache的key):12數(shù)據(jù)緩存
Hibernate: select userinfo0_.id as id1_0_0_, userinfo0_.address as address2_0_0_, userinfo0_.age as age3_0_0_, userinfo0_.name as name4_0_0_, userinfo0_.sex as sex5_0_0_ from user_info userinfo0_ where userinfo0_.id=?
Hibernate: delete from user_info where id=?
4.再次訪問http://127.0.0.1:5000/userinfo/cache?id=12(提前是有值的情況下),會發(fā)現(xiàn)控制臺重新給做了緩存采驻。
Hibernate: select userinfo0_.id as id1_0_0_, userinfo0_.address as address2_0_0_, userinfo0_.age as age3_0_0_, userinfo0_.name as name4_0_0_, userinfo0_.sex as sex5_0_0_ from user_info userinfo0_ where userinfo0_.id=?
c.h.cache.userinfo.UserInfoServiceImpl : 為userinfo的id(也是cache的key):12數(shù)據(jù)做了緩存
切換緩存
- EchCache
當我們需要使用EhCache作為緩存技術(shù)的時候审胚,只需要在pom.xml中添加EchCache的依賴即可:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
EhCache所需的配置文件ehcache.xml只需放在類路徑下,Spring Boot會自動掃描礼旅。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<cache name="UserInfo" maxElementsInMemory="1000" />
</ehcache>
Spring Boot會給我們自動配置EhCacheCacheManager的Bean膳叨。
2.Guava
當我們需要使用Guava作為緩存技術(shù)的時候,只需要在pom.xml中添加Guava的依賴即可:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
Spring Boot會給我們自動配置GuavaCacheManager的Bean痘系。
3.Redis
使用Redis菲嘴,只需添加下面的依賴即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
Spring Boot將會為我們自動配置RedisCacheManager以及RedisTemplate的Bean。