在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

在爬蟲的過程中如何使用Redis的Bloomfilter去重

在爬蟲的過程中如何使用Redis的Bloomfilter去重

更新時間:2025-12-04 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。

本篇文章給大家帶來的內容是關于如何使用Redis的Bloomfilter去重,既用上了Bloomfilter的海量去重能力,又用上了Redis的可持久化能力,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

前言:

“去重”是日常工作中會經常用到的一項技能,在爬蟲領域更是常用,并且規模一般都比較大。去重需要考慮兩個點:去重的數據量、去重速度。為了保持較快的去重速度,一般選擇在內存中進行去重。

  • 數據量不大時,可以直接放在內存里面進行去重,例如python可以使用set()進行去重。

  • 當去重數據需要持久化時可以使用redis的set數據結構。

  • 當數據量再大一點時,可以用不同的加密算法先將長字符串壓縮成 16/32/40 個字符,再使用上面兩種方法去重;

  • 當數據量達到億(甚至十億、百億)數量級時,內存有限,必須用“位”來去重,才能夠滿足需求。Bloomfilter就是將去重對象映射到幾個內存“位”,通過幾個位的 0/1值來判斷一個對象是否已經存在。

  • 然而Bloomfilter運行在一臺機器的內存上,不方便持久化(機器down掉就什么都沒啦),也不方便分布式爬蟲的統一去重。如果可以在Redis上申請內存進行Bloomfilter,以上兩個問題就都能解決了。

代碼:

# encoding=utf-8import redisfrom hashlib import md5class SimpleHash(object):
    def __init__(self, cap, seed):
        self.cap = cap
        self.seed = seed    def hash(self, value):
        ret = 0
        for i in range(len(value)):
            ret += self.seed * ret + ord(value[i])        return (self.cap - 1) & retclass BloomFilter(object):
    def __init__(self, host='localhost', port=6379, db=0, blockNum=1, key='bloomfilter'):
        """
        :param host: the host of Redis
        :param port: the port of Redis
        :param db: witch db in Redis
        :param blockNum: one blockNum for about 90,000,000; if you have more strings for filtering, increase it.
        :param key: the key's name in Redis
        """
        self.server = redis.Redis(host=host, port=port, db=db)
        self.bit_size = 1 << 31  # Redis的String類型最大容量為512M,現使用256M
        self.seeds = [5, 7, 11, 13, 31, 37, 61]
        self.key = key
        self.blockNum = blockNum
        self.hashfunc = []        for seed in self.seeds:
            self.hashfunc.append(SimpleHash(self.bit_size, seed))    def isContains(self, str_input):
        if not str_input:            return False
        m5 = md5()
        m5.update(str_input)
        str_input = m5.hexdigest()
        ret = True
        name = self.key + str(int(str_input[0:2], 16) % self.blockNum)        for f in self.hashfunc:
            loc = f.hash(str_input)
            ret = ret & self.server.getbit(name, loc)        return ret    def insert(self, str_input):
        m5 = md5()
        m5.update(str_input)
        str_input = m5.hexdigest()
        name = self.key + str(int(str_input[0:2], 16) % self.blockNum)        for f in self.hashfunc:
            loc = f.hash(str_input)
            self.server.setbit(name, loc, 1)if __name__ == '__main__':""" 第一次運行時會顯示 not exists!,之后再運行會顯示 exists! """
    bf = BloomFilter()    if bf.isContains('http://www.baidu.com'):   # 判斷字符串是否存在
        print 'exists!'
    else:        print 'not exists!'
        bf.insert('http://www.baidu.com')

說明:

  1. Bloomfilter算法如何使用位去重,這個百度上有很多解釋。簡單點說就是有幾個seeds,現在申請一段內存空間,一個seed可以和字符串哈希映射到這段內存上的一個位,幾個位都為1即表示該字符串已經存在。插入的時候也是,將映射出的幾個位都置為1。

  2. 需要提醒一下的是Bloomfilter算法會有漏失概率,即不存在的字符串有一定概率被誤判為已經存在。這個概率的大小與seeds的數量、申請的內存大小、去重對象的數量有關。下面有一張表,m表示內存大小(多少個位),n表示去重對象的數量,k表示seed的個數。例如我代碼中申請了256M,即1<<31(m=2^31,約21.5億),seed設置了7個。看k=7那一列,當漏失率為8.56e-05時,m/n值為23。所以n = 21.5/23 = 0.93(億),表示漏失概率為8.56e-05時,256M內存可滿足0.93億條字符串的去重。同理當漏失率為0.000112時,256M內存可滿足0.98億條字符串的去重。
    20161110104702907.png

  3. 基于Redis的Bloomfilter去重,其實就是利用了Redis的String數據結構,但Redis一個String最大只能512M,所以如果去重的數據量大,需要申請多個去重塊(代碼中blockNum即表示去重塊的數量)。

  4. 代碼中使用了MD5加密壓縮,將字符串壓縮到了32個字符(也可用hashlib.sha1()壓縮成40個字符)。它有兩個作用,一是Bloomfilter對一個很長的字符串哈希映射的時候會出錯,經常誤判為已存在,壓縮后就不再有這個問題;二是壓縮后的字符為 0~f 共16中可能,我截取了前兩個字符,再根據blockNum將字符串指定到不同的去重塊進行去重。

總結:

基于Redis的Bloomfilter去重,既用上了Bloomfilter的海量去重能力,又用上了Redis的可持久化能力,基于Redis也方便分布式機器的去重。在使用的過程中,要預算好待去重的數據量,則根據上面的表,適當地調整seed的數量和blockNum數量(seed越少肯定去重速度越快,但漏失率越大)。

以上就是在爬蟲的過程中如何使用Redis的Bloomfilter去重的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 老熟妇仑乱视频一区二区| 91高清国产视频| 日本xxx免费| 91小视频在线播放| 五月天视频在线观看| 91欧美视频在线| 爽爽爽在线观看| 一级日本黄色片| 免费成人深夜夜行网站视频| 国产福利精品一区二区三区| 日日干日日操日日射| 国产福利精品一区二区三区| 欧美激情第四页| 毛片在线视频观看| 久久免费视频3| 精品亚洲一区二区三区四区| 欧美精品 - 色网| 精品国产无码在线| 日韩成人三级视频| 欧美黄色一级片视频| 亚洲综合欧美激情| 久久久久久av无码免费网站下载| 大陆av在线播放| 亚洲国产高清av| 国产一区 在线播放| 国产男女无遮挡| 久久久久久久久久一区| 国产日韩第一页| 欧美a在线视频| 黄色a级三级三级三级| 国产二区视频在线| 五月天激情播播| 国产精品国产亚洲精品看不卡| 日本a级片免费观看| 伊人色在线视频| 国产成人a亚洲精v品无码| 天天操精品视频| 国产美女三级视频| 日韩国产成人无码av毛片| 污版视频在线观看| 国产精品一区二区免费在线观看| 日韩av卡一卡二| 女人另类性混交zo| 国产freexxxx性播放麻豆| 成人亚洲精品777777大片| 亚洲美免无码中文字幕在线| 天天做天天干天天操| 成人在线观看黄| 欧美一区二区视频在线播放| 国产精品久久久久久9999| 欧美激情精品久久久久久小说| 国产成人一二三区| 国产精品亚洲天堂| 午夜免费看毛片| 艹b视频在线观看| 亚洲少妇久久久| 日韩久久一级片| 干日本少妇首页| 国产一线二线三线女| 好吊色这里只有精品| 亚洲成人动漫在线| 久久久国产精华液999999 | 日韩网址在线观看| 成人免费观看在线| 久久久久久久久久伊人| 伊人久久在线观看| 激情五月婷婷六月| 国产精品视频网站在线观看| 国产欧美123| av网站手机在线观看| 日本欧美视频在线观看| 欧美中日韩在线| www.爱色av.com| 超碰中文字幕在线观看| 日本一本二本在线观看| 亚洲色成人www永久在线观看| 日韩中文字幕二区| 成人午夜视频免费在线观看| 日本成人在线免费视频| 日本三区在线观看| xx欧美撒尿嘘撒尿xx| 91热视频在线观看| 国产一级片91| 黄色动漫网站入口| 性猛交ⅹ×××乱大交| 香蕉视频免费版| 久草热视频在线观看| 午夜在线观看av| 日本在线视频www色| 免费国产黄色网址| 国产 porn| 亚洲精品天堂成人片av在线播放| 国产精品videossex国产高清| 香港三级韩国三级日本三级| 欧美性猛交xxx乱久交| 国产手机视频在线观看| 精品国产一二三四区| 在线视频观看91| 国产午夜大地久久| 视频区 图片区 小说区| 成人中文字幕在线播放| 青青草原播放器| 日韩一级免费在线观看| 国产卡一卡二在线| 成人精品视频一区二区| 国产一二三四五| 伊人影院综合在线| 一本大道熟女人妻中文字幕在线 | 97在线免费视频观看| 国产精品天天av精麻传媒| 四虎免费在线观看视频| 天天影视综合色| 欧美乱大交xxxxx潮喷l头像| 中文字幕剧情在线观看| 国产麻花豆剧传媒精品mv在线| 超碰10000| 三级性生活视频| 亚洲综合av在线播放| 国产xxxxx视频| 黄色大片在线免费看| 18视频在线观看娇喘| 特级西西444www| 国产一级做a爰片久久| 99爱视频在线| 国产精品无码av在线播放| 欧美黄网在线观看| 国产精品无码电影在线观看| 青青草原网站在线观看| 艳母动漫在线观看| 中文字幕一区二区三区四| 免费一区二区三区在线观看| 九九视频精品在线观看| aaa毛片在线观看| 白嫩少妇丰满一区二区| 男人女人黄一级| 激情 小说 亚洲 图片: 伦| 一区二区三区国产免费| 国产高清视频网站| 国产精品嫩草影视| 在线观看视频黄色| 在线视频日韩欧美| 免费成人进口网站| 亚洲熟妇无码一区二区三区导航| 久久在线中文字幕| 欧美日韩亚洲第一| 成 人 黄 色 小说网站 s色| 亚洲欧美aaa| japanese在线播放| 欧美日韩亚洲一| 国产又黄又猛又粗| 看一级黄色录像| 丰满爆乳一区二区三区| 视色视频在线观看| 欧洲金发美女大战黑人| 人人妻人人澡人人爽欧美一区双| 国产无限制自拍| 中文字幕成人在线视频| 色香蕉在线观看| 国产自产在线视频| 99视频在线视频| 日韩成人三级视频| 国产91色在线观看| 日韩黄色短视频| 日韩高清第一页| 水蜜桃色314在线观看| 国产一伦一伦一伦| 91成人在线观看喷潮教学| 网站一区二区三区| 91视频 - 88av| 污视频免费在线观看网站| 欧美久久在线观看| 爱豆国产剧免费观看大全剧苏畅 | av在线com| 天天干天天av| 黄色免费观看视频网站| 波多野结衣三级在线| 成人中文字幕av| 青草视频在线观看视频| 午夜xxxxx| 色综合色综合色综合色综合| 免费看又黄又无码的网站| 第一区免费在线观看| 久草综合在线观看| 国产中文字幕视频在线观看| 天天干天天色天天爽| 欧美激情第3页| 搡女人真爽免费午夜网站| 亚洲熟妇无码一区二区三区导航| 国产乱码一区二区三区四区| 99视频在线视频| 一本久道综合色婷婷五月| 福利视频一区二区三区四区| 99中文字幕在线| 成人性生交视频免费观看| 五月天婷婷亚洲| 国产喷水theporn| 91亚洲免费视频| 天天操精品视频| 懂色av粉嫩av蜜臀av| 国产 国语对白 露脸|