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

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中使用Spring Retry實(shí)現(xiàn)重試機(jī)制的流程步驟
這篇文章主要介紹了我們將探討如何在Java中使用Spring Retry來(lái)實(shí)現(xiàn)重試機(jī)制,重試機(jī)制在處理臨時(shí)性故障和提高系統(tǒng)穩(wěn)定性方面非常有用,文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-07-07
java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn)
這篇文章主要介紹了java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java通過(guò)XPath獲取XML文件中符合特定條件的節(jié)點(diǎn)
今天小編就為大家分享一篇關(guān)于Java通過(guò)XPath獲取XML文件中符合特定條件的節(jié)點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事
這篇文章主要介紹了關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法
這篇文章主要介紹了Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
使用Spring掃描Mybatis的mapper接口的三種配置
這篇文章主要介紹了使用Spring掃描Mybatis的mapper接口的三種配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot整合SpringSecurity實(shí)現(xiàn)權(quán)限控制之實(shí)現(xiàn)多標(biāo)簽頁(yè)
這篇文章主要介紹了SpringBoot整合SpringSecurity實(shí)現(xiàn)權(quán)限控制之實(shí)現(xiàn)多標(biāo)簽頁(yè),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
在Spring應(yīng)用中進(jìn)行單元測(cè)試的解析和代碼演示
在Spring應(yīng)用中進(jìn)行單元測(cè)試通常涉及到Spring TestContext Framework,它提供了豐富的注解和工具來(lái)支持單元測(cè)試和集成測(cè)試,以下是如何在Spring應(yīng)用中進(jìn)行單元測(cè)試的詳細(xì)解析和代碼演示,需要的朋友可以參考下2024-06-06

