亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

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

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

前言

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

整體流程

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

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

總代理 ip 池

總池子的作用就是共享所有可用的 ip,但是僅作為存儲 ip 的池子并不能實現(xiàn)自動擇優(yōu)啊,這里的擇優(yōu)通常是希望延遲低速度快的 ip 更容易被篩選出,所以我們希望池子中的 ip 是根據(jù)它們的延時升序排列,借助 Redis 的 Sorted Sets 數(shù)據(jù)結構即可實現(xiàn),用延時表示 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,可以指定獲取的個數(shù),比如取兩個:

> 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 使用次數(shù)過多是有很大的概率被目標網(wǎng)站屏蔽掉,所以這里也需要進行擇優(yōu),應該優(yōu)先篩選出使用次數(shù)少的 ip,同理也是使用 Sorted Sets,使用次數(shù)表示 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 時發(fā)生 member 沖突采取的處理方式,INCR 顧名思義是沖突后累加 score 的方式,為什么要用這個選項,看看下面這個流程:

  1. 在頻道池子中只有 1.1.1.1,使用次數(shù)為 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 的計數(shù)被錯誤地重置為 1,而不是我們預期的 12。使用 INCR 選項就可以避免這個尷尬,其實這也只能保證最終計數(shù)正確,中途還是會有些非預期的情況,如:

  1. 在頻道池子中有 1.1.1.1,使用次數(shù)為 10,還有 2.2.2.2,使用次數(shù)為 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,按使用次數(shù)少的被分配了 1.1.1.1,這就不是我們期望的,1.1.1.1 實際已經(jīng)用了 12 次,我們更希望 2.2.2.2 被取出

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

更新

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

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

總結

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

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

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

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

標簽:贛州 景德鎮(zhèn) 唐山 澳門 揚州 林芝 廣東 香港

巨人網(wǎng)絡通訊聲明:本文標題《Redis教程之代理ip池設計方法詳解》,本文關鍵詞  Redis,教程,之,代理,池,設計,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis教程之代理ip池設計方法詳解》相關的同類信息!
  • 本頁收集關于Redis教程之代理ip池設計方法詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    日本特黄一级| 97视频免费在线观看| 欧美国产日韩久久久| 四虎久久影院| 欧美a级大片| 成人高清免费| 韩国毛片免费大片| 亚洲精品久久玖玖玖玖| 日韩av东京社区男人的天堂| 欧美日本韩国| 青青青草影院 | 青青久久国产成人免费网站| 精品国产亚一区二区三区| 成人影视在线观看| 天堂网中文字幕| 亚欧成人毛片一区二区三区四区 | 天天做日日爱| 国产网站在线| 欧美大片一区| 国产高清在线精品一区a| 久久99中文字幕久久| 韩国三级香港三级日本三级| 高清一级毛片一本到免费观看| 黄色福利| 一级女人毛片人一女人| 欧美电影免费看大全| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人影院久久久久久影院| 91麻豆爱豆果冻天美星空| 国产综合91天堂亚洲国产| 一级毛片视频播放| 国产伦久视频免费观看 视频| 你懂的日韩| 国产成人精品综合久久久| 一级毛片视频免费| 青青青草影院 | 精品久久久久久中文字幕2017| 天天做人人爱夜夜爽2020 | 国产网站免费观看| 欧美日本二区| 国产91精品系列在线观看| 欧美另类videosbestsex | 午夜在线亚洲| 国产精品自拍亚洲| 国产a视频| 精品国产三级a∨在线观看| 欧美激情一区二区三区中文字幕| 精品在线观看国产| 97视频免费在线观看| 日韩免费在线观看视频| 国产成人精品综合久久久| 在线观看成人网 | 亚洲天堂免费| 国产高清在线精品一区二区| 99热精品一区| 99久久网站| 国产一区精品| 高清一级淫片a级中文字幕| 成人影视在线播放| 一 级 黄 中国色 片| 日韩一级精品视频在线观看| 韩国三级一区| 久久久成人网| 成人影院一区二区三区| 亚洲第一页乱| 亚洲第一页乱| 国产麻豆精品视频| 日韩av成人| 久久精品免视看国产成人2021| 一本伊大人香蕉高清在线观看| 99久久视频| 日本特黄特色aa大片免费| 久久国产精品自由自在| 午夜激情视频在线观看| 国产成a人片在线观看视频| 日本特黄特色aaa大片免费| 久草免费在线观看| 日韩男人天堂| 91麻豆国产级在线| 日韩一级黄色大片| 日韩中文字幕一区| 久久国产一久久高清| 天天做日日干| 国产美女在线观看| 国产一区二区精品久久| 美女被草网站| 欧美一级视频免费| 欧美a免费| 二级特黄绝大片免费视频大片| 91麻豆国产| 天天做日日爱| 欧美a级大片| 精品久久久久久中文字幕2017| 深夜做爰性大片中文| 国产91精品一区| 999久久狠狠免费精品| 天天做日日干| 一级女性全黄生活片免费| 99久久网站| 91麻豆tv| 久久国产精品自线拍免费| 久久精品免视看国产明星| 深夜做爰性大片中文| 欧美激情在线精品video| 精品毛片视频| 精品国产亚洲人成在线| 一级女性全黄生活片免费| 成人免费网站视频ww| 999久久66久6只有精品| 精品久久久久久中文字幕一区| 免费国产在线观看不卡| 97视频免费在线观看| 国产美女在线观看| 日韩av成人| 美女免费精品高清毛片在线视 | a级黄色毛片免费播放视频| 成人免费一级毛片在线播放视频| 久久久久久久久综合影视网| 久久国产精品只做精品| 成人高清护士在线播放| 香蕉视频一级| 国产成a人片在线观看视频| 欧美一级视频高清片| 欧美电影免费看大全| 青青久在线视频| 亚久久伊人精品青青草原2020| 久久福利影视| 欧美激情一区二区三区视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产成人女人在线视频观看| 亚洲精品中文一区不卡| 日本特黄特色aaa大片免费| 国产麻豆精品| 国产91精品露脸国语对白| 成人a大片高清在线观看| 久久久久久久男人的天堂| 亚久久伊人精品青青草原2020| 久久99中文字幕久久| 日韩专区一区| 日韩免费在线| 四虎影视久久久| 色综合久久天天综合| 九九久久国产精品| 亚洲精品永久一区| 日韩av片免费播放| 九九干| 欧美大片aaaa一级毛片| 91麻豆精品国产高清在线| 免费国产在线观看不卡| 精品视频在线看| 国产麻豆精品hdvideoss| 韩国三级视频网站| 久久99中文字幕| 日韩综合| 亚洲 国产精品 日韩| 久久国产影视免费精品| 国产一区二区精品久久| 国产成人精品影视| 日日日夜夜操| 毛片电影网| 欧美大片aaaa一级毛片| 国产伦久视频免费观看 视频| 国产成人女人在线视频观看| 精品久久久久久中文字幕一区| 色综合久久天天综合观看| 精品在线观看一区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 黄视频网站免费观看| 国产一区二区精品在线观看| 亚洲 国产精品 日韩| 久久成人综合网| 韩国妈妈的朋友在线播放| 精品久久久久久免费影院| 欧美另类videosbestsex | 成人a大片高清在线观看| 午夜在线影院| 精品国产亚洲人成在线| 久久国产精品自线拍免费| 国产高清视频免费| 国产高清视频免费| 午夜在线影院| 精品视频免费看| 成人a级高清视频在线观看| 国产成人啪精品| 二级特黄绝大片免费视频大片| 深夜做爰性大片中文| 毛片电影网| 国产综合成人观看在线| 欧美日本韩国| 可以在线看黄的网站| 日韩av片免费播放| 色综合久久手机在线| 国产福利免费视频| 九九九网站| 午夜在线亚洲| 黄色免费三级| 欧美a免费| 色综合久久天天综合| 韩国毛片基地| 精品视频在线观看视频免费视频|