1. 使用多線程加速
什么,爬蟲爬起來數(shù)據(jù)太慢了,怎么辦?你那當(dāng)然是開啟多線程了。那么多線程是什么我就不介紹了。如果還不知道的,請左移多線程百度百科。
恩,知道了多線程,但是多線程如果自己控制的話,會很不好控制,所以咱們還需要兩個線程池,一個負責(zé)拿到個人信息,一個負責(zé)獲取用戶的token。接下來讓咱們之前寫的ParserBase類實現(xiàn)Runnable,然后在ParserFollower里和ParserUserInfo里分別實現(xiàn)run方法,其實也很簡單了,就是把之前的爬去邏輯,丟到run方法里。然后咱們就開啟了多線程之旅。
但是在存取數(shù)據(jù)的時候會遇到很多問題,比如數(shù)據(jù)會重復(fù),這就出現(xiàn)了臟數(shù)據(jù),那么咱們就是適當(dāng)?shù)募渔i。來保證數(shù)據(jù)的干凈。
2. 使用隊列減少數(shù)據(jù)庫訪問
如果說數(shù)據(jù)重復(fù)的問題解決的,那么咱們還有一個大問題,因為兩次爬到的可能是同一個人,但是一份在數(shù)據(jù)庫里,一份在正在跑的內(nèi)存里,怎么辦,當(dāng)然是要連接下數(shù)據(jù)庫,然后判斷是數(shù)據(jù)是否已經(jīng)在數(shù)據(jù)庫中存在了,那么在多線程且獲取速度很快的情況下,那么將會頻繁訪問數(shù)據(jù)庫,造成速度緩慢,數(shù)據(jù)庫鏈接數(shù)過多,cpu使用率過大,那咱們怎么除處理這個問題呢?
首先大家都一定知道,在現(xiàn)在內(nèi)存非常大的今天,咱們完全可以把一部分數(shù)據(jù)直接緩存下載,而且程序訪問內(nèi)存的代價要比訪問數(shù)據(jù)庫的代價要小的太多。
因此,咱們可以用一個list把咱們已經(jīng)有的token存下來,然后每次去這個list里去做驗證,這樣,就減少了數(shù)據(jù)庫的訪問了頻率。