在系統(tǒng)中使用緩存务冕,可以加快獲取數(shù)據(jù)的速度书释,提高系統(tǒng)的效率翘贮,是提升系統(tǒng)性能的“銀彈”。
在spring boot中使用緩存也比較簡(jiǎn)單爆惧,下面以redis作為系統(tǒng)的緩存來進(jìn)行演示狸页。
- 配置RedisCacheManager對(duì)象。RedisCacheManager用于告訴spring boot將使用redis作為系統(tǒng)的緩存扯再。
@Bean
RedisCacheManager redisCacheManager(RedisTemplate<String, Object> objRedisTemplate) {
return new RedisCacheManager(objRedisTemplate);
}
- 配置KeyGenerator芍耘。緩存以key-value的形式保存在redis中∠ㄗ瑁可以實(shí)現(xiàn)
org.springframework.cache.interceptor.KeyGenerator接口齿穗,來規(guī)定想要保存的key的格式。
例如下面的例子用系統(tǒng)時(shí)間和傳遞的參數(shù)來生成key饺律。
@Component
public class CustomKeyGenerator implements KeyGenerator {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Object generate(Object target, Method method, Object... params) {
key=sdf.format(new Date())+params[0]窃页;
return key;
}
}
- CacheConfig用于表示關(guān)于緩存的配置,可以用來指定使用的緩存和key的生成規(guī)則复濒。
@CacheConfig(cacheNames = "redisCacheManager", keyGenerator = "customKeyGenerator")
- 使用@Cacheable注解
@Cacheable注解主要有兩個(gè)作用 1)如果用戶請(qǐng)求的數(shù)據(jù)已經(jīng)被緩存脖卖,使用@Cacheable可以直接返回緩存數(shù)據(jù) 2)如果用戶請(qǐng)求的數(shù)據(jù)沒有被緩存,將執(zhí)行Controller的方法巧颈,將查詢結(jié)果保存在緩存中畦木。例如在下面的例子中,以u(píng)ser.account作為查詢緩存的key值。
假設(shè)我們查詢account=001的用戶砸泛,如果在緩存中已經(jīng)存在key=001的值十籍,將會(huì)直接返回蛆封,不執(zhí)行userSetService.queryUserInfo(user.getAccount())方法。如果在緩存不存在這個(gè)值勾栗,則會(huì)執(zhí)行queryUserInfo的方法惨篱,并且將return的值保存在緩存中,下次再查詢account=001時(shí)會(huì)直接返回围俘。
@Cacheable(key="#user.account")
@PostMapping(value = "queryUser")
public Object queryUser(@RequestBody User user) {
return userSetService.queryUserInfo(user.getAccount());
}
- 使用@CacheEvict注解
@CacheEvict注解表示如果用戶查詢的數(shù)據(jù)已經(jīng)保存在緩存中時(shí)則清空緩存砸讳,往往用于修改用戶數(shù)據(jù)時(shí)使用。
例如下面的例子界牡,如果account=001的用戶數(shù)據(jù)在緩存中已經(jīng)存在了簿寂,就會(huì)清空key=001的緩存,如果沒有則不做處理宿亡。
@CacheEvict(key="#user.account")
@PostMapping(value = "updateUser")
public Object updateUser(@RequestBody User user) {
userSetService.updateUserInfo(user);
return "success";
}
參考資料:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html