springboot的幾個緩存相關注解


@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:緩存的清楚是否在方法之前執行,默認代表是在方法之后執行


@CacheEvict(value = "user",key = "#id")
   public void deleteUser(Integer id){
       System.out.println("deleteUser:"+id);
       userMapper.deleteUserById(id);
  }

@Caching:定義復雜的緩存規則

    @Caching(
            cacheable = {
                    @Cacheable()
            },
            put = {
                    @CachePut(),
                    @CachePut()
            },
            evict = {
                    @CacheEvict()
            }
    )
    public 返回值 方法名(參數類型 參數){
        return 返回結果;
    }

@CacheConfig:類公共配置

加在類上,為當前類統一配置,具體進入注解中查看可設置屬性,如value="?"統一類下所有的緩存名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM