1. 使用多線程加速

什么,爬蟲爬起來(lái)數(shù)據(jù)太慢了,怎么辦?你那當(dāng)然是開啟多線程了。那么多線程是什么我就不介紹了。如果還不知道的,請(qǐng)左移多線程百度百科。
恩,知道了多線程,但是多線程如果自己控制的話,會(huì)很不好控制,所以咱們還需要兩個(gè)線程池,一個(gè)負(fù)責(zé)拿到個(gè)人信息,一個(gè)負(fù)責(zé)獲取用戶的token。接下來(lái)讓咱們之前寫的ParserBase類實(shí)現(xiàn)Runnable,然后在ParserFollower里和ParserUserInfo里分別實(shí)現(xiàn)run方法,其實(shí)也很簡(jiǎn)單了,就是把之前的爬去邏輯,丟到run方法里。然后咱們就開啟了多線程之旅。
但是在存取數(shù)據(jù)的時(shí)候會(huì)遇到很多問題,比如數(shù)據(jù)會(huì)重復(fù),這就出現(xiàn)了臟數(shù)據(jù),那么咱們就是適當(dāng)?shù)募渔i。來(lái)保證數(shù)據(jù)的干凈。

2. 使用隊(duì)列減少數(shù)據(jù)庫(kù)訪問

如果說數(shù)據(jù)重復(fù)的問題解決的,那么咱們還有一個(gè)大問題,因?yàn)閮纱闻赖降目赡苁峭粋€(gè)人,但是一份在數(shù)據(jù)庫(kù)里,一份在正在跑的內(nèi)存里,怎么辦,當(dāng)然是要連接下數(shù)據(jù)庫(kù),然后判斷是數(shù)據(jù)是否已經(jīng)在數(shù)據(jù)庫(kù)中存在了,那么在多線程且獲取速度很快的情況下,那么將會(huì)頻繁訪問數(shù)據(jù)庫(kù),造成速度緩慢,數(shù)據(jù)庫(kù)鏈接數(shù)過多,cpu使用率過大,那咱們?cè)趺闯幚磉@個(gè)問題呢?
首先大家都一定知道,在現(xiàn)在內(nèi)存非常大的今天,咱們完全可以把一部分?jǐn)?shù)據(jù)直接緩存下載,而且程序訪問內(nèi)存的代價(jià)要比訪問數(shù)據(jù)庫(kù)的代價(jià)要小的太多。
因此,咱們可以用一個(gè)list把咱們已經(jīng)有的token存下來(lái),然后每次去這個(gè)list里去做驗(yàn)證,這樣,就減少了數(shù)據(jù)庫(kù)的訪問了頻率。

網(wǎng)友評(píng)論