真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于redis緩存查詢店鋪-創(chuàng)新互聯(lián)

基于redis緩存查詢店鋪

創(chuàng)新互聯(lián)提供高防主機、云服務(wù)器、香港服務(wù)器、IDC機房托管
@Override
    public Result queryById(Long id) {
        //從redis中查詢商鋪緩存
        String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);
        //判斷緩存是否命中
        if (StrUtil.isNotBlank(shopJson)){
            //命中,則返回店鋪信息
            Shop shop = JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        }
        //未命中,根據(jù)id查詢數(shù)據(jù)庫
        Shop shop = getById(id);
        //不存在該店鋪,報錯
        if (shop==null){
            return Result.fail("店鋪不存在!");
        }
        //存在,寫入redis
        stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY+id,JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);
        //返回
        return Result.ok(shop);
    }
緩存更新策略

緩存穿透

?緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠不會生效,這些請求都會打到數(shù)據(jù)庫(一些別有用心的人就會利用這一點不斷的發(fā)出這樣的請求,導(dǎo)致服務(wù)器壓力變大)。

常見的兩種解決方案: 緩存空對象

*優(yōu)點:實現(xiàn)簡單,維護方便

*缺點:1.額外的內(nèi)存消耗. 2.可能存在數(shù)據(jù)短期的不一致。

布隆過濾

優(yōu)點:內(nèi)存占用較少。沒有多余的key。

缺點:1.實現(xiàn)復(fù)雜 2.存在誤判的可能。

布隆過濾器可以簡單的理解為:是一個bite數(shù)組,里面存的是二進制位,不是把數(shù)據(jù)庫里面的數(shù)據(jù)存儲到布隆過濾器里面,而是把這些數(shù)據(jù)基于某種Hash算法計算出Hash值,然后再將這些Hash值轉(zhuǎn)換成二進位保存到布隆過濾器里面,當我們要去判斷數(shù)據(jù)庫里面的數(shù)據(jù)是否存在的時候,其實就是判斷對應(yīng)的位置是0還是1.

基于redis緩存查詢店鋪考慮緩存穿透問題

@Override
    public Result queryById(Long id) {
        //從redis中查詢商鋪緩存
        String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);
        //判斷緩存是否命中
        if (StrUtil.isNotBlank(shopJson)){
            //命中,則返回店鋪信息
            Shop shop = JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        }
        //命中為"",說明在數(shù)據(jù)庫中店鋪不存在
        if (shopJson !=null){
            return Result.fail("店鋪不存在!");
        }
        //未命中,根據(jù)id查詢數(shù)據(jù)庫
        Shop shop = getById(id);
        //不存在該店鋪,報錯
        if (shop==null){
            //將空值寫入redis中
            stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY +id,"",CACHE_NULL_TTL,TimeUnit.MINUTES);
            return Result.fail("店鋪不存在!");
        }
        //存在,寫入redis
        stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY+id,JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);
        //返回
        return Result.ok(shop);
    }
緩存雪崩

緩存雪崩是指在同一時段大量的緩存key同時失效或者Redis服務(wù)宕機,導(dǎo)致大量請求到達數(shù)據(jù)庫,帶來巨大的壓力。

解決方案

1.由于大量的緩存同時失效,造成原因可能就是TTL時間到了。所以:給不同的Key的TTL添加隨機值。

2.針對redis宕機:搭建redis集群形成主從,假設(shè)主宕機了,我們就可以從 從機替代,這樣就可以確保redis可以一直對外提供服務(wù)。

3.給緩存業(yè)務(wù)添加降級限流策略

4.給業(yè)務(wù)添加多級緩存

緩存擊穿

緩存擊穿問題也叫熱點Key問題,就是一個被高并發(fā)訪問并且緩存重建業(yè)務(wù)較復(fù)雜的key突然失效了,無數(shù)的請求訪問會在瞬間給數(shù)據(jù)庫帶來巨大的沖擊。

假設(shè):一個熱點key失效了,當線程1來了,發(fā)現(xiàn)沒有緩存,就會去重建緩存,這個過程又比較久,在重建的過程中仍然有許多的請求。

常見的兩種解決方案: ? 1.互斥鎖

缺點:性能比較差。因為在構(gòu)建緩存的過程中,其他的線程都要等待。

2.邏輯過期?

也就是在緩存中多了一個邏輯過期時間。而沒有真的去設(shè)置TTL過期時間。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


分享名稱:基于redis緩存查詢店鋪-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/gesgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部