中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

使用Redis實(shí)現(xiàn)UA池的方案-創(chuàng)新互聯(lián)

最近忙于業(yè)務(wù)開(kāi)發(fā)、交接和游戲,加上碰上了不定時(shí)出現(xiàn)的猶豫期和困惑期,荒廢學(xué)業(yè)了一段時(shí)間。天冷了,要重新拾起開(kāi)始下階段的學(xué)習(xí)了。之前接觸到的一些數(shù)據(jù)搜索項(xiàng)目,涉及到請(qǐng)求模擬,基于反爬需要使用隨機(jī)的 User Agent ,于是使用 Redis 實(shí)現(xiàn)了一個(gè)十分簡(jiǎn)易的 UA 池。

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供吉陽(yáng)企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為吉陽(yáng)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

背景

最近的一個(gè)需求,有模擬請(qǐng)求的邏輯,要求每次請(qǐng)求的請(qǐng)求頭中的 User Agent 要滿(mǎn)足下面幾點(diǎn):

  • 每次獲取的 User Agent 是隨機(jī)的。
  • 每次獲取的 User Agent (短時(shí)間內(nèi))不能重復(fù)。
  • 每次獲取的 User Agent 必須帶有主流的操作系統(tǒng)信息(可以是 Uinux 、 Windows 、 IOS 和安卓等等)。

這里三點(diǎn)都可以從 UA 數(shù)據(jù)的來(lái)源解決,實(shí)際上我們應(yīng)該關(guān)注具體的實(shí)現(xiàn)方案。簡(jiǎn)單分析一下,流程如下:

使用Redis實(shí)現(xiàn)UA池的方案

在設(shè)計(jì) UA 池的時(shí)候,它的數(shù)據(jù)結(jié)構(gòu)和環(huán)形隊(duì)列十分類(lèi)似:

使用Redis實(shí)現(xiàn)UA池的方案

上圖中,假設(shè)不同顏色的 UA 是完全不同的 UA ,它們通過(guò)洗牌算法打散放進(jìn)去環(huán)形隊(duì)列中,實(shí)際上每次取出一個(gè) UA 之后,只需要把游標(biāo) cursor 前進(jìn)或者后退一格即可(甚至可以把游標(biāo)設(shè)置到隊(duì)列中的任意元素)。最終的實(shí)現(xiàn)就是:需要通過(guò)中間件實(shí)現(xiàn)分布式隊(duì)列(只是隊(duì)列,不是消息隊(duì)列)。

具體實(shí)現(xiàn)方案

毫無(wú)疑問(wèn)需要一個(gè)分布式數(shù)據(jù)庫(kù)類(lèi)型的中間件才能存放已經(jīng)準(zhǔn)備好的 UA ,第一印象就感覺(jué) Redis 會(huì)比較合適。接下來(lái)需要選用 Redis 的數(shù)據(jù)類(lèi)型,主要考慮幾個(gè)方面:

UA

支持這幾個(gè)方面的 Redis 數(shù)據(jù)類(lèi)型就是 List ,不過(guò)注意 List 本身不能去重,去重的工作可以用代碼邏輯實(shí)現(xiàn)。然后可以想象客戶(hù)端獲取 UA 的流程大致如下:

使用Redis實(shí)現(xiàn)UA池的方案

結(jié)合前面的分析,編碼過(guò)程有如下幾步:

準(zhǔn)備好需要導(dǎo)入的 UA 數(shù)據(jù),可以從數(shù)據(jù)源讀取,也可以直接文件讀取。

  •  因?yàn)樾枰獙?dǎo)入的 UA 數(shù)據(jù)集合一般不會(huì)太大,考慮先把這個(gè)集合的數(shù)據(jù)隨機(jī)打散,如果使用 Java 開(kāi)發(fā)可以直接使用 Collections#shuffle() 洗牌算法,當(dāng)然也可以自行實(shí)現(xiàn)這個(gè)數(shù)據(jù)隨機(jī)分布的算法, 這一步對(duì)于一些被模擬方會(huì)嚴(yán)格檢驗(yàn) UA 合法性的場(chǎng)景是必須的 。
  • 導(dǎo)入 UA 數(shù)據(jù)到 Redis 列表中。
  • 編寫(xiě) RPOP + LPUSHLua 腳本,實(shí)現(xiàn)分布式循環(huán)隊(duì)列。

編碼和測(cè)試示例

引入 Redis 的高級(jí)客戶(hù)端 Lettuce 依賴(lài):

<dependency>
  <groupId>io.lettuce</groupId>
  <artifactId>lettuce-core</artifactId>
  <version>5.2.1.RELEASE</version>
</dependency>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)標(biāo)題:使用Redis實(shí)現(xiàn)UA池的方案-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://www.rwnh.cn/article8/doioop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、虛擬主機(jī)、網(wǎng)站營(yíng)銷(xiāo)、品牌網(wǎng)站建設(shè)App開(kāi)發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
安岳县| 成安县| 兴山县| 丹阳市| 仙桃市| 湾仔区| 尚志市| 衡阳市| 万全县| 莱芜市| 拜城县| 九江市| 沿河| 阜新市| 德保县| 中方县| 黎平县| 安福县| 中西区| 曲周县| 盈江县| 辛集市| 阳朔县| 滨海县| 会理县| 林周县| 肃南| 开原市| 陵水| 兴安盟| 文水县| 襄樊市| 富顺县| 灵丘县| 明溪县| 额济纳旗| 新野县| 崇明县| 许昌市| 衡水市| 马关县|