国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力

這篇具有很好參考價值的文章主要介紹了Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力,Redis實戰(zhàn)與進階,緩存,數(shù)據(jù)庫,redis,spring,java

????歡迎光臨,終于等到你啦????

??我是蘇澤,一位對技術(shù)充滿熱情的探索者和分享者。????

??持續(xù)更新的專欄Redis實戰(zhàn)與進階

本專欄講解Redis從原理到實踐

這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦????

努力的蘇澤http://suzee.blog.csdn.net/

?文章來源地址http://www.zghlxwxcb.cn/news/detail-843041.html


緩存如何實現(xiàn)?面試必考題? 請看 我的講解以及最佳實踐吧

目錄

緩存如何實現(xiàn)?面試必考題? 請看 我的講解以及最佳實踐吧

關(guān)于 Redis 緩存的解釋如下:

實現(xiàn)思路圖

商戶緩存跟著視頻做的,然后我按照同樣的方法邏輯 把商店類型的緩存自己做了一遍

首先注冊一個IShopTypeService服務(wù)的對象typeService 然后直接調(diào)用typeService的方法queryTypeList()

?

下一節(jié)我們來講解 Redis緩存擊穿 緩存雪崩等緩存更新會發(fā)生的問題? 都是Redis的面試必考題


?

關(guān)于 Redis 緩存的解釋如下:

  1. Redis 如何實現(xiàn)緩存?
    在后端接收到請求后,對于需要進行緩存的接口,首先會在 Redis 中查找是否有對應的數(shù)據(jù)。如果緩存中不存在數(shù)據(jù),系統(tǒng)會繼續(xù)按照正常的業(yè)務(wù)流程處理請求,并將查詢到的結(jié)果返回給客戶端的同時也存儲在 Redis 中。下次相同的請求到達時,系統(tǒng)可以直接從 Redis 中獲取數(shù)據(jù),而無需訪問數(shù)據(jù)庫。

在啟用緩存后,相同的請求在緩存有效期內(nèi)不會再去讀取數(shù)據(jù)庫。但是,如果在此期間修改了數(shù)據(jù)庫中的數(shù)據(jù),接口返回的數(shù)據(jù)就無法保證與數(shù)據(jù)庫一致。因此,在進行增、刪、改操作時,需要刷新緩存。

  1. Redis 緩存更新策略是什么?
    緩存更新可以采用不同的策略,以下是兩種常見情況的比較:

第一種情況是先更新數(shù)據(jù)庫,然后同步更新緩存,或者先更新緩存,然后同步更新數(shù)據(jù)庫。這兩種方式都屬于寫穿透(write through)策略。同步更新的好處是可以保持數(shù)據(jù)的一致性,但缺點是同步更新會對性能產(chǎn)生影響。

第二種情況是先更新緩存,然后異步寫回數(shù)據(jù)庫,也被稱為寫回(write back)策略。異步寫回的優(yōu)點是不會影響緩存的高性能,能夠快速響應客戶端請求。但缺點是在數(shù)據(jù)異步寫回數(shù)據(jù)庫之前,緩存與數(shù)據(jù)庫的數(shù)據(jù)可能短暫不一致。

Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力,Redis實戰(zhàn)與進階,緩存,數(shù)據(jù)庫,redis,spring,java

實現(xiàn)思路圖

Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力,Redis實戰(zhàn)與進階,緩存,數(shù)據(jù)庫,redis,spring,java

?

商戶緩存跟著視頻做的,然后我按照同樣的方法邏輯 把商店類型的緩存自己做了一遍

以下是步驟

首先注冊一個IShopTypeService服務(wù)的對象typeService 然后直接調(diào)用typeService的方法queryTypeList()

@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {
    @Resource
    private IShopTypeService typeService;

    @GetMapping("list")
    public Result queryTypeList() {
//        List<ShopType> typeList = typeService.query().orderByAsc("sort").list();
        return typeService.queryTypeList();
    }
}

在IShopTypeService接口中我們定義這個抽象方法 然后在IShopTypeService的實現(xiàn)類IShopTypeServiceImp中實現(xiàn)這個方法

public interface IShopTypeService extends IService<ShopType> {

    Result queryTypeList();
}
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Resource//引入mybatis的接口 用于查數(shù)據(jù)庫
    private IShopTypeService shopTypeService;
    @Override
    public Result queryTypeList() {
        //1.從redis中查詢有無
        String shopTypeJson = stringRedisTemplate.opsForValue().get("shopType");
        //2.判斷是否存在
        if (StrUtil.isNotBlank(shopTypeJson)){
            //3.存在直接返回 JSONUtil.parseArray將JSON 數(shù)組字符串轉(zhuǎn)換為 Java 對象列表
            List<ShopType> shopType= BeanUtil.copyToList(JSONUtil.parseArray(shopTypeJson), ShopType.class);
//            System.err.println(shopType);
            return Result.ok(shopType);
        }
        //不存在 查詢數(shù)據(jù)庫
        List<ShopType> shopTypeList = shopTypeService.query().orderByAsc("sort").list();

        //數(shù)據(jù)庫不存在 返回報錯
        if (shopTypeList ==null) {
            return Result.fail("查詢失敗");
        }
        //數(shù)據(jù)庫存在 寫入redis  返回
        //將list轉(zhuǎn)換成json 要用toJsonStr不能toString
        String str = JSONUtil.toJsonStr(shopTypeList);
        stringRedisTemplate.opsForValue().set("shopType",str);
//        System.err.println(str);
        return Result.ok(shopTypeList);
    }
}
  • 首先,從 Redis 中查詢數(shù)據(jù)是否存在。
  • 如果數(shù)據(jù)存在,將 JSON 數(shù)組字符串轉(zhuǎn)換為?List<ShopType>?對象,并直接返回結(jié)果。
  • 如果數(shù)據(jù)不存在于 Redis 中,則從數(shù)據(jù)庫查詢商店類型列表。
  • 如果數(shù)據(jù)庫查詢失敗,返回查詢失敗的錯誤信息。
  • 如果數(shù)據(jù)庫查詢成功,將查詢結(jié)果轉(zhuǎn)換為 JSON 字符串,并存儲到 Redis 中。
  • 最后,返回查詢結(jié)果。

?

下一節(jié)我們來講解 Redis緩存擊穿 緩存雪崩等緩存更新會發(fā)生的問題? 都是Redis的面試必考題

?

?

?

到了這里,關(guān)于Springboot+Redis:實現(xiàn)緩存 減少對數(shù)據(jù)庫的壓力的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Redis緩存數(shù)據(jù)庫

    目錄 一、概述 1、Redis ?2、Redis的安裝 Redis Windows環(huán)境設(shè)置 3、String: 字符串 3.1、字符串 3.2、數(shù)值 3.3、bitmap 4、Hash: 散列 5、List: 列表 6、Set: 集合 7、Sorted Set: 有序集合 常識: 磁盤:1.尋址:ms(毫秒)2.帶寬:MB/s 內(nèi)存:1.尋址:ns? ? (納秒)?2.帶寬:GB/s 秒--毫秒--微妙--納秒

    2024年02月04日
    瀏覽(23)
  • redis實戰(zhàn)-緩存數(shù)據(jù)&解決緩存與數(shù)據(jù)庫數(shù)據(jù)一致性

    redis實戰(zhàn)-緩存數(shù)據(jù)&解決緩存與數(shù)據(jù)庫數(shù)據(jù)一致性

    緩存( Cache),就是數(shù)據(jù)交換的 緩沖區(qū) ,俗稱的緩存就是 緩沖區(qū)內(nèi)的數(shù)據(jù) ,一般從數(shù)據(jù)庫中獲取,存儲于本地代碼。防止過高的數(shù)據(jù)訪問猛沖系統(tǒng),導致其操作線程無法及時處理信息而癱瘓,這在實際開發(fā)中對企業(yè)講,對產(chǎn)品口碑,用戶評價都是致命的;所以企業(yè)非常重視緩存技術(shù),

    2024年02月12日
    瀏覽(35)
  • Redis緩存數(shù)據(jù)庫(四)

    Redis緩存數(shù)據(jù)庫(四)

    目錄 一、概述 1、Redis Sentinel 1.1、docker配置Redis Sentinel環(huán)境 2、Redis存儲方案 2.1、哈希鏈 2.2、哈希環(huán) 3、Redis分區(qū)(Partitioning)? 4、Redis面試題 Redis Sentinel為Redis提供了 高可用解決方案 。實際上這意味著使用Sentinel可以部署一套Redis, 在沒有人為干預的情況下去應付各種各樣的失

    2024年02月05日
    瀏覽(21)
  • redis數(shù)據(jù)庫緩存服務(wù)器

    redis數(shù)據(jù)庫緩存服務(wù)器

    redis比mysql訪問數(shù)據(jù)快 非關(guān)系型數(shù)據(jù)庫以鍵值對的方式存儲數(shù)據(jù) 作用:加快訪問速度,緩解數(shù)據(jù)庫壓力 redis最新版本7 特點 豐富的數(shù)據(jù)結(jié)構(gòu) list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲 支持持久化 支持事務(wù) “一個完整的動作,要么全部執(zhí)行,要么什么也沒有做” 支持主從支持高可用,支持

    2024年02月05日
    瀏覽(29)
  • Redis如何保證緩存和數(shù)據(jù)庫一致性?

    現(xiàn)在我們在面向增刪改查開發(fā)時,數(shù)據(jù)庫數(shù)據(jù)量大時或者對響應要求較快,我們就需要用到Redis來拿取數(shù)據(jù)。 Redis:是一種高性能的內(nèi)存數(shù)據(jù)庫,它將數(shù)據(jù)以鍵值對的形式存儲在內(nèi)存中,具有讀寫速度快、支持多種數(shù)據(jù)類型、原子性操作、豐富的特性等優(yōu)勢。 優(yōu)勢: 性能極高

    2024年01月16日
    瀏覽(40)
  • Redis---數(shù)據(jù)庫和緩存如何保證一致性?

    用「讀 + 寫」請求的并發(fā)的場景來分析: 假如某個用戶數(shù)據(jù)在緩存中不存在,請求 A 讀取數(shù)據(jù)時從數(shù)據(jù)庫中查詢到年齡為 20,在未寫入緩存中時另一個請求 B 更新數(shù)據(jù)。它更新數(shù)據(jù)庫中的年齡為 21,并且清空緩存。這時請求 A 把從數(shù)據(jù)庫中讀到的年齡為 20 的數(shù)據(jù)寫入到緩存

    2024年01月24日
    瀏覽(27)
  • Redis如何保障緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性問題?

    Redis如何保障緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性問題?

    目錄 一.最經(jīng)典的數(shù)據(jù)庫加緩存的雙寫雙刪模式 二. 高并發(fā)場景下的緩存+數(shù)據(jù)庫雙寫不一致問題分析與解決方案設(shè)計 三、上面高并發(fā)的場景下,該解決方案要注意的問題 1.1 Cache Aside Pattern概念以及讀寫邏輯 (1)讀的時候,先讀緩存,緩存沒有的話,那么就讀數(shù)據(jù)庫,然后取

    2023年04月21日
    瀏覽(29)
  • redis的緩存更新策略以及如何保證redis與數(shù)據(jù)庫的數(shù)據(jù)一致性

    redis的緩存更新策略有這么幾種: 1、由應用直接和redis以及數(shù)據(jù)庫相連接: ?? ??? ?查詢數(shù)據(jù)時,應用去redis中查詢,查不到的話再由應用去數(shù)據(jù)庫中查詢,并將查詢結(jié)果放在redis; ?? ??? ?更新數(shù)據(jù)時,由應用去觸發(fā)redis數(shù)據(jù)的刪除以及數(shù)據(jù)庫的update。 2、應用只跟redi

    2024年02月13日
    瀏覽(25)
  • 數(shù)據(jù)庫緩存服務(wù)——NoSQL之Redis配置與優(yōu)化

    數(shù)據(jù)庫緩存服務(wù)——NoSQL之Redis配置與優(yōu)化

    目錄 一、緩存概念 1.1 系統(tǒng)緩存 1.2 緩存保存位置及分層結(jié)構(gòu) 1.2.1 DNS緩存 1.2.2 應用層緩存 1.2.3 數(shù)據(jù)層緩存 1.2.4 硬件緩存 二、關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫 2.1 關(guān)系型數(shù)據(jù)庫 2.2 非關(guān)系型數(shù)據(jù)庫 2.3 關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫區(qū)別: 2.4 非關(guān)系型數(shù)據(jù)庫產(chǎn)生背景 2.5 總結(jié)

    2024年02月15日
    瀏覽(24)
  • Redis數(shù)據(jù)庫 | 發(fā)布訂閱、主從復制、哨兵模式、緩存雪崩

    Redis數(shù)據(jù)庫 | 發(fā)布訂閱、主從復制、哨兵模式、緩存雪崩

    ??wei_shuo的個人主頁 ??wei_shuo的學習社區(qū) ??Hello World ! Redis 發(fā)布訂閱 (pub/sub) 是一種消息通信模式:發(fā)送者 (pub) 發(fā)送消息,訂閱者 (sub) 接收消息 Redis 客戶端可以訂閱任意數(shù)量的頻道 Redis主從復制是指在Redis中設(shè)置一個主節(jié)點(Master)和一個或多個從節(jié)點(Slave),

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包