@Cacheable:查詢
幾個屬性:
cacheNames/value:指定緩存組件的名字;
key:緩存數據使用的key,可以用來指定。默認即使用方法參數的值
keyGenerator:key的生成器,可以自己指定key的生成器的組件id
//自定義配置類配置keyGenerator @Configuration public class MyCacheConfig { @Bean("myKeyGenerator") public KeyGenerator keyGenerator(){ return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { return method.getName()+"["+ Arrays.asList(params).toString() +"]"; } }; } }
cacheManager:指定緩存管理器;或者cacheResolver獲取指定解析器
condition:指定符合條件的情況下才緩存;如condition="#id>0"
unless:否定緩存,當unless指定的條件為true,方法的返回值不會被緩存,可以獲取到結果進行判斷;如unless="#result==null";
sync:是否使用異步模式
@Cacheable(cacheNames = "user",keyGenerator = "myKeyGenerator") public User getUser(Integer id) { System.out.println("查詢" + id + "號用戶"); User user = userMapper.getUserId(id); return user; }
@CachePut:更新
既調用方法,又更新緩存數據,可達到同步更新緩存;
修改了數據庫的某個數據,同時更新緩存
運行時機:
1、先調用運行方法;2、將目標方法的結果緩存起來
value:緩存名 key:緩存的key其中#result表示方法返回的結果(確保更新的key和查詢一致即可做到同時更新數據庫數據和緩存中的數據)
@CachePut(value="user",key = "#result.id") public User updateUser(User user){ System.out.println("updateUser:"+user); userMapper.updateUser(user); return user; }
@CacheEvict:刪除
緩存清除:目的是為了刪除一個數據並刪掉緩存
key:指定要清除的數據(對應上key可實現目的即同時做到刪除數據庫和緩存中的數據)
allEntries =true:指定清楚這個緩存中所有的數據
beforeInvocation = false:緩存的清楚是否在方法之前執行,默認代表是在方法之后執行
@Caching:定義復雜的緩存規則
@Caching( cacheable = { @Cacheable() }, put = { @CachePut(), @CachePut() }, evict = { @CacheEvict() } ) public 返回值 方法名(參數類型 參數){ return 返回結果; }
@CacheConfig:類公共配置
加在類上,為當前類統一配置,具體進入注解中查看可設置屬性,如value="?"統一類下所有的緩存名