使用SpringCache進(jìn)行緩存數(shù)據(jù)庫查詢方式
SpringCache進(jìn)行緩存數(shù)據(jù)庫查詢
1、在SpringBoot的啟動類上添加注解@EnableCaching
開啟SpringCache緩存支持
@SpringBootApplication
// 開啟SpringCache緩存支持
@EnableCaching
public class GatheringApplication {
public static void main(String[] args) {
SpringApplication.run(GatheringApplication.class, args);
}
}
2、在service的方法上添加對應(yīng)的注解
/**
* 根據(jù)ID查詢
*
* @param id
* @return
*/
// 使用SpringCache進(jìn)行緩存數(shù)據(jù)庫查詢
@Cacheable(value = "gathering", key = "#id")
public Gathering findById(String id) {
return gatheringDao.findById(id).get();
}
/**
* 修改
*
* @param gathering
*/
// 修改數(shù)據(jù)庫數(shù)據(jù)后需要刪除redis中的緩存
@CacheEvict(value = "gathering", key = "#gathering.id")
public void update(Gathering gathering) {
gatheringDao.save(gathering);
}
/**
* 刪除
*
* @param id
*/
// 刪除數(shù)據(jù)庫數(shù)據(jù)后需要刪除redis中的緩存
@CacheEvict(value = "gathering", key = "#id")
public void deleteById(String id) {
gatheringDao.deleteById(id);
}
SpringCache 數(shù)據(jù)庫一致性問題
緩存和數(shù)據(jù)庫不一致的問題
先更新數(shù)據(jù)庫,再更新緩存

先更新數(shù)據(jù)庫更新成功了,但是更新redis的時候失敗了,這就導(dǎo)致了數(shù)據(jù)庫和Redis里面的數(shù)據(jù)不一致,
解決辦法
先更新緩存,再更新數(shù)據(jù)庫,更新緩存的時候,先刪除緩存,再去更新數(shù)據(jù)庫,再添加緩存 這樣的話即使緩存更新失敗了 緩存里面的數(shù)據(jù)也被刪了,如果刪除緩存都失敗的話,就不更新數(shù)據(jù)庫了,直接拋異常解決,這時候如果后面一個加入緩存失敗的話只是增加了一次查詢數(shù)據(jù)庫的操作而已(下一次查這個數(shù)據(jù)的時候把他加入緩存)
高并發(fā)下redis和數(shù)據(jù)庫不一致問題

如果這這兩個操作剛好在中間虛線部分那么緩存里面的數(shù)據(jù)和數(shù)據(jù)庫里面的數(shù)據(jù)就不一樣了,這個時候我們要解決這個問題就得引入分布式鎖

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot嵌入式Servlet容器與定制化組件超詳細(xì)講解
這篇文章主要介紹了SpringBoot嵌入式Servlet容器與定制化組件的使用介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實現(xiàn)示例
在處理大量數(shù)據(jù)時,直接從數(shù)據(jù)庫一次性讀取所有數(shù)據(jù)可能會導(dǎo)致內(nèi)存溢出或者性能下降,本文就來介紹一下java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實現(xiàn)示例,感興趣的可以了解一下2024-01-01
java idea如何根據(jù)請求路徑url自動找到對應(yīng)controller方法插件
這篇文章主要介紹了java idea如何根據(jù)請求路徑url自動找到對應(yīng)controller方法插件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

