星期五呀劃波水呀

2021-10-10 07:52:37 字數 1121 閱讀 3494

最近在學redis的時候,看到redis中解決快取擊穿(就是資料庫裡面沒有的資料在的資料,在redis上面也不會有,然後程序看redis上面沒有,就去訪問資料庫。這種情況一多,容易造成資料庫奔潰)的問題時候。看到一種解決方法叫 布隆過濾器,熟悉的趕腳啊。

在學大資料的時候,hdaoop的hbase元件裡面也有這種演算法。布隆過濾器的大概工作原理就是我捋了一下,把自己學到的整理一下。

布隆過濾器的分成兩個重要的部分吧,乙個bool(邏輯陣列),因為布隆過濾器只要在陣列的相應的位置標記一下,當前這個下標是否是有值的。就完成了對資料的儲存。

那麼資料又是怎知道,自己該往bool的那個位置放嘞。這就是布隆過濾器的第二個部分了。hash演算法,在當前的布隆過濾器中定義單個儲存的hash值演算法(可以多個),將得到的hash值整除bool的長度,得到的數字就是當前元素在布隆過濾器上得儲存位置(不存資料,只是表明當前這個元素已在布隆過濾器裡面被標記了),就是bool中的相應位置設定為true。

舉個例子:

我現在有乙個布隆過濾器,bool長度是10;

現在我有兩個元素 「北京」,「南京」。我定了兩個hash演算法,

1.根據元素的第乙個字元求hash值

2.根據元素的第二個字元求hash值,他們整除10之後儲存到bool中,這個時候bool中 只有三個位置設定為了true(「北京」和「南京」,「京」子重複了,所以「南京」儲存的時候,會和「北京」的乙個hash值重複);

將這個兩個元素儲存到布隆過濾器中之後,bool中只有三個位置為true。

這個時候我檢索「南北」,「東京」這兩個元素在不在當前這個布隆過濾器中。聰明的寶貝已經知道了,「南北」會被判斷為在當前的布隆過濾器中,「東京」不在。

布隆過濾器檢索元素的時候是有一定誤差的,肯定不存在,概率性存在(可能存在),為什麼嘞?

因為根據我們定義的hash演算法,「南北」這個元素的hash值正好已經在bool中被標記了,而「東京」這個元素根據1.hash演算法算出的hash值不在bool中。所以布隆過濾器只會對元素存在有誤判機率。不存在則肯定不存在。

所以布隆過濾器很適合redis中解決快取擊穿問題,減少對資料庫的多次訪問。

鬱悶的星期五

今天真是鬱悶,昨夜同學電腦出問題,讓我幫忙。於是整個上午都在幫同學弄電腦,好像弄不好誓不罷休似的,結果十二點多的時候終於柳暗花明又一村了。呵呵。但是今天下午,我正在辦公室好好學習天天向上時,來了兩個女生。讓我幫忙看電腦,怎麼辦哪?人來總不好意思拒絕吧,於是乎又只能continue。乙個弄好後,沒想到...

2014 3 7 星期五 困

昨日進度 人工智慧 上課前作業完成,上課中複習離散 聽課 中 基本完成,要複習一下 體育 中午 完成數電作業 中上 數電 複習 聽課 優 基本複習一遍,完成任務 無課 去圖書館 晚飯在旁邊吃 還書 借書 複習 中下 太睏了,結果書看得有點少,書還了沒借 毛澤 看測控 結束那本書 下 上課是看電影 寢...

一道水題 黑色星期五

問題描述 有些西方人比較迷信,如果某個月的13號正好是星期五,他們就會覺得不太吉利,用古人的說法,就是 諸事不宜 請你編寫乙個程式,統計出在某個特定的年份中,出現了多少次既是13號又是星期五的情形,以幫助你的迷信朋友解決難題。說明 1 一年有365天,閏年有366天,所謂閏年,即能被4整除且不能被1...