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

redis中使用bloomfilter的白名單功能解決緩存穿透問題

 更新時間:2023年07月26日 11:47:09   作者:健康平安的活著  
本文主要介紹了redis中使用bloomfilter的白名單功能解決緩存穿透問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一 緩存預熱

1.1 緩存預熱

將需要的數(shù)據(jù)提前緩存到緩存redis中,可以在服務啟動時候,或者在使用前一天完成數(shù)據(jù)的同步等操作。保證后續(xù)能夠正常使用。

1.2 緩存穿透

在redis中,查詢redis緩存數(shù)據(jù)沒有內容,接著查詢mysql數(shù)據(jù)庫,也沒有需要的內容,做了兩次無用的查詢。進而造成mysql數(shù)據(jù)庫的負擔,造成一系列的風險。

解決辦法:bloomfilter+白名單實現(xiàn)過濾。

1.3 白名單的作用

白名單里面有才讓允許通過,沒有的內容則不允許通過。但是存在誤判的情況,比如bloomfilter中存在查詢的內容且允許通過,但是并不是我們真正需要的那個內容。

 1.4 白名單入門案例

public class WhiteList {
    public static void main(String[] args) {
        testGuavaWithBloomFilter();
    }
    public static void testGuavaWithBloomFilter()
    {
        //1 創(chuàng)建guava版布隆過濾器
        BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 100);
        //2 判斷指定的元素是否存在
        System.out.println(bloomFilter.mightContain(1));
        System.out.println(bloomFilter.mightContain(2));
        System.out.println();
        //3 講元素新增進入bloomfilter
        bloomFilter.put(1);
        bloomFilter.put(2);
        System.out.println(bloomFilter.mightContain(1));
        System.out.println(bloomFilter.mightContain(2));
    }
}

結果:

1.5 白名單+過濾器的實現(xiàn)案例

邏輯:   guava布隆過濾器插入100萬樣本數(shù)據(jù)并額外10W測試是否存在,這10w的數(shù)據(jù)在100w的數(shù)據(jù)可能存在相同的情況,存儲到相同位置。比如規(guī)則為m%3,則 1,4,7放到同一個位置槽中。

 1.5.1 代碼邏輯

1.controller

@RestController
@Slf4j
public class GuvaFilter {
    @Resource
    private GuavaBloomFilterService guavaBloomFilterService;
    @ApiOperation("guava布隆過濾器插入100萬樣本數(shù)據(jù)并額外10W測試是否存在")
    @RequestMapping(value = "/guavafilter",method = RequestMethod.GET)
    public void guavaBloomFilter()
    {
        guavaBloomFilterService.guavaBloomFilter();
    }
}

2.service

@Service
@Slf4j
public class GuavaBloomFilterService
{
    //1 定義一個常量
    public static final int _1W = 10000;
    //2 定義我們guava布隆過濾器,初始容量
    public static final int SIZE = 100 * _1W;
    //3 誤判率,它越小誤判的個數(shù)也就越少(思考,是否可以是無限?。浚繘]有誤判豈不是更好)
    public static double fpp = 0.01;//0.01 0.000000000000001
    //4 創(chuàng)建guava布隆過濾器
    private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), SIZE,fpp);
    public void guavaBloomFilter()
    {
        //1 先讓bloomFilter加入100W白名單數(shù)據(jù)
        for (int i = 1; i <= SIZE  ; i++) {
            bloomFilter.put(i);
        }
        //2 故意取10W個不在合法范圍內的數(shù)據(jù),來進行誤判率的演示
        ArrayList<Integer> list = new ArrayList<>(10 * _1W);
        //3 驗證
        for (int i = SIZE+1; i <= SIZE+(10 * _1W) ; i++)
        {
            if(bloomFilter.mightContain(i))
            {
                log.info("被誤判了:{}",i);
                list.add(i);
            }
        }
        log.info("誤判總數(shù)量:{}",list.size());
    }
}

3.截圖

控制臺打印日志:

1.6 bloomfilter總結

bloomfilter作用:查詢的內容A,一定不存在,在過濾器中查詢肯定沒有;如果存在,但是存在誤判的情況,但是誤判率很小,可以忽略。

1.7 黑名單的使用

黑名單:在黑名單的存在的內容,就不再推薦;不存在則推薦。

應用案例: 抖音等媒體的推薦內容。

到此這篇關于redis中使用bloomfilter的白名單功能解決緩存穿透問題的文章就介紹到這了,更多相關redis bloomfilter解決緩存穿透內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis快速實現(xiàn)分布式session的方法詳解

    Redis快速實現(xiàn)分布式session的方法詳解

    Session是客戶端與服務器通訊會話跟蹤技術,服務器與客戶端保持整個通訊的會話基本信息。本文主要介紹了Redis快速實現(xiàn)分布式session的方法,感興趣的可以學習一下
    2022-01-01
  • Centos7安裝redis的超詳細步驟教程

    Centos7安裝redis的超詳細步驟教程

    Redis是當前比較熱門的NOSQL系統(tǒng)之一,它是一個key-value存儲系統(tǒng),下面這篇文章主要介紹了Centos7安裝redis的超詳細步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • Redis實現(xiàn)限流器的三種方法(小結)

    Redis實現(xiàn)限流器的三種方法(小結)

    本文主要介紹了Redis實現(xiàn)限流器的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Linux環(huán)境搭建Redis6.x集群環(huán)境詳解(主從復制)

    Linux環(huán)境搭建Redis6.x集群環(huán)境詳解(主從復制)

    本文詳細介紹了如何搭建和管理一個Redis集群,包括主從復制、集群配置、批量腳本、集群啟動和關閉、節(jié)點的增刪、投票機制以及主節(jié)點宕機演示,通過這些步驟,可以實現(xiàn)Redis集群的高可用性和性能擴展
    2026-03-03
  • Redis利用互斥鎖解決緩存擊穿問題

    Redis利用互斥鎖解決緩存擊穿問題

    使用互斥鎖可以有效防止緩存擊穿的情況發(fā)生,它能夠保證在緩存失效時,只有一個線程或者進程能夠去加載數(shù)據(jù),其余的請求都會等待這個加載過程完成,雖然這種方式會犧牲一部分性能,但它大大提高了系統(tǒng)的穩(wěn)定性和可用性
    2024-08-08
  • Redisson如何解決redis分布式鎖過期時間到了業(yè)務沒執(zhí)行完問題

    Redisson如何解決redis分布式鎖過期時間到了業(yè)務沒執(zhí)行完問題

    這篇文章主要介紹了Redisson如何解決redis分布式鎖過期時間到了業(yè)務沒執(zhí)行完問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟

    分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟

    這篇文章主要介紹了分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟,數(shù)據(jù)分別存入mongodb和mysql數(shù)據(jù)庫,具體內容詳情及實例代碼大家參考下本文
    2018-03-03
  • Redis主從實現(xiàn)讀寫分離

    Redis主從實現(xiàn)讀寫分離

    這篇文章主要為大家詳細介紹了Redis主從實現(xiàn)讀寫分離的相關資料 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 如何利用Redis?List實現(xiàn)Java數(shù)據(jù)庫分頁快速查詢

    如何利用Redis?List實現(xiàn)Java數(shù)據(jù)庫分頁快速查詢

    這篇文章主要給大家介紹了關于如何利用Redis?List實現(xiàn)Java數(shù)據(jù)庫分頁快速查詢的相關資料,Redis是一個高效的內存數(shù)據(jù)庫,它支持包括String、List、Set、SortedSet和Hash等數(shù)據(jù)類型的存儲,需要的朋友可以參考下
    2024-02-02
  • React中immutable的使用

    React中immutable的使用

    這篇文章主要介紹了React中immutable的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論

宜黄县| 馆陶县| 浮山县| 玉林市| 五莲县| 巢湖市| 蓬安县| 深水埗区| 新竹市| 镇原县| 贵德县| 郎溪县| 永胜县| 腾冲县| 龙井市| 阜宁县| 连云港市| 红安县| 东源县| 米脂县| 洛阳市| 洛川县| 琼结县| 沈阳市| 仁化县| 宜章县| 连江县| 开封县| 怀化市| 滨海县| 长海县| 应城市| 潮安县| 翁源县| 招远市| 梅州市| 贺州市| 德令哈市| 班玛县| 武乡县| 宜城市|