SpringCacheの@CachePut
1812 ワード
CachePut注記を使用すると、このメソッドは毎回実行され、対応するkeyがキャッシュに値する(または更新される)ことは、次の2つに分けられます.値nullを返すと、次回キー値クエリーを行うと、データベースも1回調べられます.この場合@CacheEveict注釈に相当します. 戻り値がnullでない場合、そのkey値キャッシュの更新が行われ、キャッシュ値が戻りデータであることが更新される.
分析:状況の戻り値はnull:
ケース2の戻り値がnullでない場合:まずデータidが1のクエリーを行い、次のクエリーidが1のデータがDBにクエリーされず、直接キャッシュされないことを発見した. は、idが1のデータ更新操作を行い、戻り値がnullである. idが1のデータクエリーを行い、このときidが1キャッシュで存在しないことを発見し、DBクエリーを行う. まずデータidが1のクエリーを行い、次のクエリーidが1のデータがDBにクエリーされず、直接キャッシュされないことを発見した. このときidが1のデータ更新操作を行い、戻り値はnullではない. はidが1のデータ照会を行い、このときidが1で更新されたデータがキャッシュされ、DB照会操作が行われていないことを発見した.
分析:状況の戻り値はnull:
// Redis
@Cacheable(value="Manager",key="#id")
public User findById(Integer id) {
System.out.println("--- DB-----");
return userMapper.selectByPrimaryKey(id);
}
@CachePut(value="Manager",key="#manager.getId()")
//@CacheEvict(value="Manager",key="#manager.getId()")//
public User update(User manager) {
userMapper.updateByPrimaryKeySelective(manager);
//return userMapper.selectByPrimaryKey(manager.getId());
return null;
}
ケース2の戻り値がnullでない場合:
// Redis
@Cacheable(value="Manager",key="#id")
public User findById(Integer id) {
System.out.println("--- DB-----");
return userMapper.selectByPrimaryKey(id);
}
@CachePut(value="Manager",key="#manager.getId()")
//@CacheEvict(value="Manager",key="#manager.getId()")//
public User update(User manager) {
userMapper.updateByPrimaryKeySelective(manager);
return userMapper.selectByPrimaryKey(manager.getId());
//return null;
}