婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Redis教程之代理ip池設計方法詳解

Redis教程之代理ip池設計方法詳解

熱門標簽:玄武湖地圖標注 地圖標注如何即時生效 太原營銷外呼系統 竹間科技AI電銷機器人 百度商家地圖標注怎么做 西藏教育智能外呼系統價格 最簡單的百度地圖標注 地圖標注費用 小紅書怎么地圖標注店

前言

眾所周知代理 ip 因為配置簡單而且廉價,經常用來作為反反爬蟲的手段,但是穩定性一直是其詬病。篩選出優質的代理 ip 并不簡單,即使付費購買的代理 ip 源,賣家也不敢保證 100% 可用;另外代理 ip 的生命周期也無法預知,可能上一秒能用,下一秒就撲街了。基于這些原因,會給使用代理 ip 的爬蟲程序帶來很多不穩定的因素。要排除代理 ip 的影響,通常的做法是建一個代理 ip 池,每次請求前來池子取一個 ip,用完之后歸還,保證池子里的 ip 都是可用的。本文接下來就探討一下,如何使用 Redis 構建代理 ip 池,實現自動更新,自動擇優。

整體流程

由上圖所示,左側是形成了整個流程的閉環,從爬蟲程序以獨占的方式拿到一個代理 ip 到爬取完成歸還 ip。這個流程其實是不太嚴謹的,如果爬蟲程序異常中斷,就會導致 ip 無法歸還,就會導致這個 ip 無法循環利用。但是由于代理 ip 本身的特點,量多而且循環利用的價值并不大,所以這種情況就let it go。

上面也提到 ip 是以獨占的方式獲取,如果是去爬兩個毫不相關的網站,本來一個 ip 就可以,可現在需要兩個。為了資源最大化使用,這里引入了頻道 ip 池和總代理 ip 池。兩個網站就當做兩個頻道,各自獨占,互不相關;總池子就是保存所有的 ip,每個頻道都共享。假設只有一個 ip:1.1.1.1 在總池子,爬 A 網站會把它從總池子取到 A 頻道的 ip 池,然后 A 爬蟲程序從 A 頻道 ip 池取出 1.1.1.1 進行使用,這時 1.1.1.1 依然在總池子里,但 A 頻道的 ip 池已經不包含 1.1.1.1 了;爬 B 網站也是一樣的流程拿到 1.1.1.1,只是從 B 自己的頻道池獲取。下面就詳細說說總池子和頻道池子。

總代理 ip 池

總池子的作用就是共享所有可用的 ip,但是僅作為存儲 ip 的池子并不能實現自動擇優啊,這里的擇優通常是希望延遲低速度快的 ip 更容易被篩選出,所以我們希望池子中的 ip 是根據它們的延時升序排列,借助 Redis 的 Sorted Sets 數據結構即可實現,用延時表示 score,ip 表示 member。

使用 ZADD 添加新 ip 或更新 ip 的延遲:

> ZADD proxy_global_ips 200 1.1.1.1:8080 100 2.2.2.2:80 300 3.3.3.3:8888
(integer) 3

使用 ZRANGE 獲取 ip,可以指定獲取的個數,比如取兩個:

> ZRANGE proxy_global_ips 0 1 WITHSCORES
1) "2.2.2.2:80" 
2) "100" 
3) "1.1.1.1:8080" 
4) "200" 

頻道 ip 池

頻道 ip 池的作用是為了最大化使用總池子中的 ip,并且隔離其他頻道的 ip 池。由于一個 ip 使用次數過多是有很大的概率被目標網站屏蔽掉,所以這里也需要進行擇優,應該優先篩選出使用次數少的 ip,同理也是使用 Sorted Sets,使用次數表示 score,ip 表示 member,這里與總池子明顯的不同之處是 key 不是固定的,需要把頻道名稱組合進去,這樣保證頻道之間的隔離,如頻道 abc 的 key:proxy_channel_abc_ips

由于頻道池子中的 ip 是要以獨占的方式取出,我們需要一個 ZPOP 的方法,奈何 Redis 本身沒有,還好可以通過 Lua 模擬,在一個原子操作下取出 ip,然后刪除:

> eval "local el = redis.call('zrange', KEYS[1], 0, 0, 'WITHSCORES'); redis.call('zrem', KEYS[1], el[1]); return el;" 1 proxy_channel_abc_ips

往頻道 ip 池添加 ip:

> ZADD proxy_channel_abc_ips INCR 0 1.1.1.1:8080

這里與總池子不同的是多了一個 INCR 選項,這是 Redis 3.0.2 版本后才支持的新特性,即指定在 ZADD 時發生 member 沖突采取的處理方式,INCR 顧名思義是沖突后累加 score 的方式,為什么要用這個選項,看看下面這個流程:

  1. 在頻道池子中只有 1.1.1.1,使用次數為 10;總池子也有 1.1.1.1,而且排在第一個
  2. 線程 A 取出 1.1.1.1
  3. 線程 B 從頻道池子取 ip,沒取到,從總池子補充 ip 到頻道池子:ZADD proxy_channel_abc_ips 0 1.1.1.1;取出 1.1.1.1
  4. 線程 A 歸還 1.1.1.1:ZADD proxy_channel_abc_ips 11 1.1.1.1
  5. 線程 B 歸還 1.1.1.1:ZADD proxy_channel_abc_ips 1 1.1.1.1

第 5 步結束后,ip 1.1.1.1 的計數被錯誤地重置為 1,而不是我們預期的 12。使用 INCR 選項就可以避免這個尷尬,其實這也只能保證最終計數正確,中途還是會有些非預期的情況,如:

  1. 在頻道池子中有 1.1.1.1,使用次數為 10,還有 2.2.2.2,使用次數為 2;總池子也有 1.1.1.1,而且排在第一個
  2. 線程 A 取出 1.1.1.1
  3. 線程 B 取出 2.2.2.2
  4. 線程 C 從頻道池子取 ip,沒取到,從總池子補充 ip 到頻道池子:ZADD proxy_channel_abc_ips 0 1.1.1.1;取出 1.1.1.1
  5. 線程 C 歸還 1.1.1.1:ZADD proxy_channel_abc_ips INCR 1 1.1.1.1
  6. 線程 B 歸還 2.2.2.2:ZADD proxy_channel_abc_ips INCR 3 2.2.2.2
  7. 線程 D 來池子取 ip,按使用次數少的被分配了 1.1.1.1,這就不是我們期望的,1.1.1.1 實際已經用了 12 次,我們更希望 2.2.2.2 被取出

如果要避免這個問題,一個簡單粗暴的辦法就是增加頻道池子的容量,讓 ip 數永遠大于并發的線程數。

更新

與 ip 有關的兩個屬性:延時(爬取頁面所花的時間)和使用次數。上面只講到了根據它們自動擇優,這里的就來說下它們是如何更新的。延時和使用次數的更新需要爬蟲程序的配合,程序中要記錄時間和遞增使用次數,在歸還 ip 時要將最新值帶回給總池子和頻道池子。上面頻道 ip 池的例子也有提及,每次歸還 ip 都要將最新的使用次數帶上,其次還要將 ip 的延時更新到總池子里面。如果歸還 ip 時出現使用失敗的情況,就要將該 ip 從總池子里刪除掉,保證該 ip 不會再被使用,至于當前的頻道池不用歸還就行了。其他頻道池不作任何處理,因為 ip 在當前頻道不可用,一般都是因為被屏蔽,其他頻道依然可以使用,即使確實都不能使用,也會在其他頻道歸還 ip 時被刪除。

這兩個屬性其實也可以都在 Redis 中更新,在獲取 ip 時,使用 Hashs 保存 ip 對應的獲取時間和使用次數;在歸還時從 Hashs 中取出時間計算出延時,取出使用次數并加 1,再分別更新到總池子和頻道池子中。而且這還能避免上面提到的獲取 ip 不符合預期的問題。

總結

放在 Redis 中更新的方法也有弊端,延時會包含獲取和歸還的傳輸時間,如果爬蟲程序獲取一個 ip 多次使用,會造成使用次數統計偏少。當然也可以通過在程序中多次調用 Redis 更新 ip 的屬性來解決,這樣增加了整個流程的復雜性,需要自己權衡。

個人還是傾向在程序中記錄,最后更新到 Redis 中。這個方案邏輯確實不夠嚴謹,但是出現問題也不會導致嚴重后果。程序的健壯性也不是不允許出現 bug,而是出現 bug 有很好的容錯性。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • 超強、超詳細Redis數據庫入門教程
  • 30個php操作redis常用方法代碼例子
  • redis 隊列操作的例子(php)
  • redis常用命令、常見錯誤、配置技巧等分享
  • 64位Windows下安裝Redis教程
  • Flyway數據庫版本控制的教程詳解
  • 利用Python爬取可用的代理IP
  • 利用TaskManager爬取2萬條代理IP實現自動投票功能
  • php代碼檢查代理ip的有效性
  • 通過Python爬蟲代理IP快速增加博客閱讀量

標簽:贛州 景德鎮 唐山 澳門 揚州 林芝 廣東 香港

巨人網絡通訊聲明:本文標題《Redis教程之代理ip池設計方法詳解》,本文關鍵詞  Redis,教程,之,代理,池,設計,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis教程之代理ip池設計方法詳解》相關的同類信息!
  • 本頁收集關于Redis教程之代理ip池設計方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久精品网站免费观看| 亚洲精品一区二区三区香蕉 | 国产经典欧美精品| 欧美疯狂做受xxxx富婆| 欧美一区二区高清| 日本视频免费一区| 欧美日本高清视频在线观看| 亚洲一区二区四区蜜桃| 在线观看国产91| 亚洲精品日日夜夜| 欧美久久一二区| 国产一区二区三区精品视频| 欧美v日韩v国产v| 国产大陆亚洲精品国产| 欧美国产禁国产网站cc| 北岛玲一区二区三区四区| 中文字幕一区二区三区蜜月 | 欧美亚洲一区二区在线| 一区二区激情小说| 91精品国产综合久久福利| 久久国产夜色精品鲁鲁99| 国产亚洲精品7777| 色偷偷成人一区二区三区91| 日本强好片久久久久久aaa| 国产欧美久久久精品影院| 在线免费观看不卡av| 日本亚洲最大的色成网站www| 精品久久久久久综合日本欧美| 丰满岳乱妇一区二区三区| 亚洲精品一二三区| 久久精品欧美一区二区三区麻豆| 色综合久久久久久久久久久| 国产黄色91视频| 国产精品视频免费看| 91麻豆精品国产91| 成人一级视频在线观看| 久久激情五月激情| 午夜国产不卡在线观看视频| 国产精品国产精品国产专区不片| 4hu四虎永久在线影院成人| 99久久99久久久精品齐齐| 极品美女销魂一区二区三区 | 免费成人小视频| 舔着乳尖日韩一区| 丝袜美腿亚洲色图| 亚洲女子a中天字幕| 国产欧美日韩亚州综合| 日韩欧美一级精品久久| 色伊人久久综合中文字幕| 国产传媒久久文化传媒| 九九久久精品视频| 亚洲一区免费观看| 亚洲一区二区精品久久av| 中文字幕国产精品一区二区| 国产午夜精品一区二区三区嫩草| 欧美电视剧免费全集观看| 91成人国产精品| 欧美嫩在线观看| 欧美欧美欧美欧美首页| 91精品国产综合久久国产大片| 欧美精品视频www在线观看| 欧美日免费三级在线| 日韩欧美国产一二三区| 久久久精品人体av艺术| 中文字幕乱码亚洲精品一区| 国产精品色呦呦| 综合电影一区二区三区| 午夜不卡av免费| 一本到不卡精品视频在线观看| 国产精品自拍一区| 日本韩国欧美一区二区三区| 3d成人动漫网站| 国产精品久久久一本精品| 一区二区三区在线免费| 蜜桃在线一区二区三区| 粉嫩一区二区三区性色av| gogogo免费视频观看亚洲一| 日韩精品一区二区三区中文不卡 | 日本美女一区二区三区视频| 99r国产精品| 精品久久久久久无| 亚洲午夜电影网| 91在线观看下载| 国产精品免费aⅴ片在线观看| 免费一级片91| 日韩欧美国产一区二区在线播放 | 一区二区三区日韩| 成人一级视频在线观看| 精品福利一区二区三区| 亚洲gay无套男同| 欧美日韩中文字幕一区| 亚洲黄色尤物视频| 91在线观看污| 亚洲视频一区二区在线| 99精品视频在线观看免费| 亚洲欧洲国产专区| 日本高清不卡在线观看| 亚洲国产精品久久人人爱| 在线亚洲+欧美+日本专区| 亚洲乱码国产乱码精品精的特点| 国产91精品在线观看| 国产精品国产三级国产有无不卡 | 蜜桃视频在线一区| 欧美一区国产二区| 日本不卡视频一二三区| 日韩一区二区在线观看视频播放| 青娱乐精品视频| 2021久久国产精品不只是精品| 日本伊人色综合网| 亚洲女与黑人做爰| 日本韩国一区二区三区| 午夜伊人狠狠久久| 久久亚洲精精品中文字幕早川悠里 | 亚洲国产视频一区| 69av一区二区三区| 成人妖精视频yjsp地址| 亚洲欧美日韩国产手机在线| 欧洲精品一区二区三区在线观看| 蜜乳av一区二区| 亚洲美女屁股眼交3| 精品99999| 欧美日韩国产成人在线91 | 国产女人aaa级久久久级| 欧美亚洲国产一区二区三区va| 日本女人一区二区三区| 亚洲精品福利视频网站| 日本一二三不卡| 日韩欧美中文一区二区| 色欧美片视频在线观看在线视频| 国产一区不卡视频| 精品综合免费视频观看| 五月婷婷久久综合| 日韩精品一二三区| 亚洲午夜日本在线观看| 亚洲女厕所小便bbb| 一区二区三区在线免费| 亚洲欧美日韩久久| 亚洲一区二区三区美女| 亚洲一区在线观看视频| 一区二区三区免费看视频| 成人免费在线观看入口| 久久精品国产久精国产爱| 一区二区三区在线观看视频| 1000精品久久久久久久久| 国产精品嫩草影院com| 亚洲女女做受ⅹxx高潮| 亚洲综合成人网| 免费久久精品视频| 蜜桃视频在线一区| 高清成人免费视频| av亚洲精华国产精华精华| 91麻豆免费在线观看| 欧美一区二区三区在| 亚洲国产高清在线| 亚洲影视资源网| 成人午夜视频福利| 7777女厕盗摄久久久| 日韩一区中文字幕| 精品一区二区免费看| 欧美日本在线视频| 国产精品美女久久久久高潮| 视频一区二区三区入口| 不卡视频一二三四| 精品精品国产高清a毛片牛牛| 亚洲私人影院在线观看| 美女视频网站久久| 欧美日韩日日摸| 一卡二卡三卡日韩欧美| 成人av动漫在线| 久久免费国产精品| 狠狠色丁香久久婷婷综| 日韩一区二区在线播放| 亚洲444eee在线观看| 欧美久久久影院| 天天综合色天天综合| 欧美日韩成人在线一区| 婷婷亚洲久悠悠色悠在线播放| 欧美在线短视频| 亚洲精选在线视频| 99在线热播精品免费| 亚洲免费在线电影| 亚洲精品一区二区精华| 美女视频一区二区三区| 国产亚洲欧美在线| 成人av免费在线播放| 亚洲精品乱码久久久久久日本蜜臀| 一本一道波多野结衣一区二区| 亚洲男人天堂av网| 欧美日韩一区成人| 久久99日本精品| 亚洲人成亚洲人成在线观看图片 | 欧美日韩在线综合| 日本大胆欧美人术艺术动态| 欧美精品一区二区三区在线| 国产成人免费9x9x人网站视频| 国产精品素人视频| 7777精品伊人久久久大香线蕉 | 欧美日韩国产小视频| 美女免费视频一区| 中文字幕亚洲区|