最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis安全策略詳解

 更新時(shí)間:2022年07月27日 15:31:10   作者:kaico2018  
緩存穿透是指當(dāng)用戶在查詢一條數(shù)據(jù)的時(shí)候,而此時(shí)數(shù)據(jù)庫和緩存卻沒有關(guān)于這條數(shù)據(jù)的任何記錄,而這條數(shù)據(jù)在緩存中沒找到就會(huì)向數(shù)據(jù)庫請(qǐng)求獲取數(shù)據(jù)。用戶拿不到數(shù)據(jù)時(shí),就會(huì)一直發(fā)請(qǐng)求,查詢數(shù)據(jù)庫,這樣會(huì)對(duì)數(shù)據(jù)庫的訪問造成很大的壓力

緩存穿透

高并發(fā)情況下查詢一個(gè)不存在的key

產(chǎn)生的背景(原因):

緩存穿透是指使用不存在的key進(jìn)行大量的高并發(fā)查詢,導(dǎo)致緩存無法命中,每次請(qǐng)求都要都要穿透到后端數(shù)據(jù)庫查詢,使得數(shù)據(jù)庫的壓力非常大,甚至導(dǎo)致數(shù)據(jù)庫服務(wù)壓死;

解決方案:

  1. 接口層實(shí)現(xiàn)api限流、用戶授權(quán)、id檢查等;
  2. 從緩存和數(shù)據(jù)庫都取不到數(shù)據(jù)的話,一樣將數(shù)據(jù)庫空值放入緩存中,設(shè)置30s有效期避免使用同一個(gè)id對(duì)數(shù)據(jù)庫攻擊壓力大;
  3. 布隆過濾器

緩存擊穿

高并發(fā)情況下查詢的一個(gè)key突然過期

產(chǎn)生背景(原因):

在高并發(fā)的情況下,當(dāng)一個(gè)緩存key過期時(shí),因?yàn)樵L問該key請(qǐng)求較大,多個(gè)請(qǐng)求同時(shí)發(fā)現(xiàn)緩存過期,因此對(duì)多個(gè)請(qǐng)求同時(shí)數(shù)據(jù)庫查詢、同時(shí)向Redis寫入緩存數(shù)據(jù),這樣會(huì)導(dǎo)致數(shù)據(jù)庫的壓力非常大;

解決方案:

  1. 使用分布式鎖

保證在分布式情況下,使用分布式鎖保證對(duì)于每個(gè)key同時(shí)只允許只有一個(gè)線程查詢到后端服務(wù),其他沒有獲取到鎖的權(quán)限,只需要等待即可;這種高并發(fā)壓力直接轉(zhuǎn)移到分布式鎖上,對(duì)分布式鎖的壓力非常大。

  1. 使用本地鎖

使用本地鎖與分布式鎖機(jī)制一樣,只不過分布式鎖適應(yīng)于服務(wù)集群、本地鎖僅限于單個(gè)服務(wù)使用。

  1. 軟過過期

設(shè)置熱點(diǎn)數(shù)據(jù)永不過期或者異步延長(zhǎng)過期時(shí)間;

緩存雪崩

高并發(fā)情況下大量的key 集中失效

產(chǎn)生背景(原因):

緩存雪崩指緩存服務(wù)器重啟或者大量的緩存集中在某個(gè)時(shí)間段失效,突然給數(shù)據(jù)庫產(chǎn)生了巨大的壓力,甚至擊垮數(shù)據(jù)庫的情況。

解決思路:對(duì)不用的數(shù)據(jù)使用不同的失效時(shí)間,加上隨機(jī)數(shù)

布隆過濾器

布隆過濾器適用于判斷某個(gè)數(shù)據(jù)是否在集合中存在,不一定百分百準(zhǔn)備, Bloom Filter基本實(shí)現(xiàn)原理采用位數(shù)組與聯(lián)合函數(shù)一起實(shí)現(xiàn);

布隆過濾器最大的問題:就是可能會(huì)存在一個(gè)誤判的問題,如果向誤判概率越低,則二進(jìn)制數(shù)組會(huì)越大,同時(shí)也會(huì)非常占用空間

基于布隆過濾器解決緩存穿透問題

maven依賴

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>22.0</version>
</dependency>

測(cè)試代碼

public class BlongTest {
    /**
     * 在布隆中存放100萬條數(shù)據(jù)
     */
    private static Integer size = 1000000;
    public static void main(String[] args) {
        BloomFilter<Integer> integerBloomFilter = BloomFilter.create(Funnels.integerFunnel(), size, 0.01);
        for (int i = 0; i < size; i++) {
            integerBloomFilter.put(i);
        }
        // 從布隆中查詢數(shù)據(jù)是否存在
        ArrayList<Integer> strings = new ArrayList<>();
        for (int j = size; j < size + 10000; j++) {
            if (integerBloomFilter.mightContain(j)) {
                strings.add(j);
            }
        }
        System.out.println("誤判數(shù)量:" + strings.size());
    }
}

解決緩存擊穿代碼

@RequestMapping("/getOrder")
public OrderEntity getOrder(Integer orderId) {
    if (integerBloomFilter != null) {
        if (!integerBloomFilter.mightContain(orderId)) {
            System.out.println("從布隆過濾器中檢測(cè)到該key不存在");
            return null;
        }
    }
    // 1.先查詢Redis中數(shù)據(jù)是否存在
    OrderEntity orderRedisEntity = (OrderEntity) redisTemplateUtils.getObject(orderId + "");
    if (orderRedisEntity != null) {
        System.out.println("直接從Redis中返回?cái)?shù)據(jù)");
        return orderRedisEntity;
    }
    // 2. 查詢數(shù)據(jù)庫的內(nèi)容
    System.out.println("從DB查詢數(shù)據(jù)");
    OrderEntity orderDBEntity = orderMapper.getOrderById(orderId);
    if (orderDBEntity != null) {
        System.out.println("將Db數(shù)據(jù)放入到Redis中");
        redisTemplateUtils.setObject(orderId + "", orderDBEntity);
    }
    return orderDBEntity;
}
/**
* 添加訂單id到布隆過濾器中
*/
@RequestMapping("/dbToBulong")
public String dbToBulong() {
    List<Integer> orderIds = orderMapper.getOrderIds();
    integerBloomFilter = BloomFilter.create(Funnels.integerFunnel(), orderIds.size(), 0.01);
    for (int i = 0; i < orderIds.size(); i++) {
        integerBloomFilter.put(orderIds.get(i));
    }
    return "success";
}

到此這篇關(guān)于Redis安全策略詳解的文章就介紹到這了,更多相關(guān)Redis安全內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例

    Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例

    這篇文章主要介紹了Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • Redis實(shí)現(xiàn)分布式鎖的幾種方法總結(jié)

    Redis實(shí)現(xiàn)分布式鎖的幾種方法總結(jié)

    這篇文章主要介紹了Redis實(shí)現(xiàn)分布式鎖的幾種方法總結(jié)的相關(guān)資料, Redis實(shí)現(xiàn)與Zookeeper實(shí)現(xiàn)和數(shù)據(jù)庫實(shí)現(xiàn),需要的朋友可以參考下
    2017-07-07
  • 淺談Redis中的緩存更新策略

    淺談Redis中的緩存更新策略

    這篇文章主要介紹了淺談Redis中的緩存更新策略,CacheAsidePatter是我們比較常用的緩存更新策略,其由緩存調(diào)用者在更新數(shù)據(jù)庫時(shí),在業(yè)務(wù)邏輯中設(shè)置緩存更新,需要的朋友可以參考下
    2023-08-08
  • 淺談Redis位圖(Bitmap)及Redis二進(jìn)制中的問題

    淺談Redis位圖(Bitmap)及Redis二進(jìn)制中的問題

    這篇文章主要介紹了Redis位圖(Bitmap)及Redis二進(jìn)制中的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • redis分布式ID解決方案示例詳解

    redis分布式ID解決方案示例詳解

    這篇文章主要為大家介紹了redis分布式ID解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • redis 解決庫存并發(fā)問題實(shí)現(xiàn)數(shù)量控制

    redis 解決庫存并發(fā)問題實(shí)現(xiàn)數(shù)量控制

    本文主要介紹了redis 解決庫存并發(fā)問題實(shí)現(xiàn)數(shù)量控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot集成redis錯(cuò)誤問題及解決方法

    SpringBoot集成redis錯(cuò)誤問題及解決方法

    這篇文章主要介紹了SpringBoot集成redis錯(cuò)誤問題,本文給大家分享完美解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例

    Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例

    延遲隊(duì)列是Redis的一個(gè)重要應(yīng)用場(chǎng)景,本文主要介紹了Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 使用Redis實(shí)現(xiàn)實(shí)時(shí)排行榜功能

    使用Redis實(shí)現(xiàn)實(shí)時(shí)排行榜功能

    排行榜功能是一個(gè)很普遍的需求。使用 Redis 中有序集合的特性來實(shí)現(xiàn)排行榜是又好又快的選擇。接下來通過本文給大家介紹使用Redis實(shí)現(xiàn)實(shí)時(shí)排行榜功能,需要的朋友可以參考下
    2021-07-07
  • win 7 安裝redis服務(wù)【筆記】

    win 7 安裝redis服務(wù)【筆記】

    Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
    2016-05-05

最新評(píng)論

盐亭县| 文成县| 聂拉木县| 汝城县| 集安市| 禹州市| 怀柔区| 宜都市| 冷水江市| 山东| 特克斯县| 芒康县| 藁城市| 长岭县| 渝北区| 察雅县| 巫溪县| 太康县| 柘荣县| 沈阳市| 九龙城区| 新河县| 新宾| 平乡县| 米脂县| 湟源县| 色达县| 华容县| 太原市| 文昌市| 临猗县| 肇庆市| 奎屯市| 屏南县| 台中市| 诏安县| 奎屯市| 寿光市| 台中县| 西畴县| 锦州市|