golang實現的redis布隆過濾器 布隆過濾器

2021-10-17 05:03:16 字數 987 閱讀 7689

1.分布式redis實現布隆過濾器

引入pom檔案

org.redisson

redisson-spring-boot-starter

3.13.4

public static void main(string args) {

config config = new config();

config.usesingleserver().setaddress("redis:");

//構造redisson

redissonclient redisson = redisson.create(config);

rbloomfilter bloomfilter = redisson.getbloomfilter("phonelist");

//初始化布隆過濾器:預計元素為100000000l,誤差率為3%

bloomfilter.tryinit(100000000l,0.03);

//將號碼10086插入到布隆過濾器中

bloomfilter.add("10086");

//判斷下面號碼是否在布隆過濾器中

//輸出false

system.out.println(bloomfilter.contains("123456"));

//輸出true

system.out.println(bloomfilter.contains("10086"));

2.普通布隆過濾器

bloom_count:預計資料總數

0.01:預計錯誤率

bloomfilter filter = bloomfilter.create(funnels.stringfunnel(charset.defaultcharset()),bloom_count,0.01)

主要以下兩個方法

放入過濾器裡面filter.put("aa");

判斷過濾器裡面有沒有:bloomfilter.mightcontain("aa")

布隆過濾器原理及golang的快速實現

最近面臨這樣的場景 2億 資料需要呼叫後端服務a,業務需要1min處理完成,那麼a服務承載的tps達到驚人的300w.必須想辦法降低tps。那麼方案來了 1 把時間視窗拉長 2 降低待處理資料量。拉長時間業務肯定是接受不了的,但是按照以往的經驗,這部分資料並不全部需要處理,可能僅有一半真正需要呼叫a...

基於redis 實現布隆過濾器

redis中有乙個資料結構叫做bitmap 下方有官網詳解 它提供乙個最大長度為512mb 2 32 的位陣列。我們可以把它提供給布隆過濾器做位陣列。根據 數學之美 中給出的資料,在使用8個雜湊函式的情況下,512mb大小的位陣列在誤報率萬分之五的情況下可以對約兩億的url去重。而若單純的使用set...

golang 利用redis實現分布式鎖

redis知識準備 redis setnx命令 setnx 如果key不存在則建立,並返回true 如果key存在則不操作,並返回false redis ttl命令 如果對key設定了過期時間,則ttl命令返回key到過期時所剩餘的時間 如果key沒有設定過期時間,則ttl命令返回 1 獲取鎖的過期...