redis相關
全稱為remote dictionary server。國內使用到的公司也很多。
其關鍵字可以歸納為:
1.開源
並以實際應用驅動。
2.key-value
這種KV特性將其與關系型數據庫本質的區別開來。這也是redis流行的關鍵因素所在。
3.內存數據庫
這種將數據存儲在內存中是redis性能(主要針對存取速度)優於硬盤數據庫的根本。為了便於數據長久保存,其也支持持久化操作。
redis特性
1.豐富的數據類型與相應操作。每種數據類型都有特定的應用場景。
2.性能極高。
3.功能豐富。提供的進階特性能夠滿足數據庫使用需求。
redis數據結構
包括string/hash/list/set/zset,針對每種結構的使用情景可見文章:redis之其中武器。
hash特點就是在string基礎上可實現單個key的多個filed的存儲;list就不用說了,就是雙向鏈表的特性。set就是集合,它和list的區別體現在value的有序性和唯一性上,操作上更貼近集合的概念,提供交集、並集等。zset相比set多了一個score項,並利用其實現value的排序。
redis進階特性
1.事物。一組命令的集合。
2.生存時間。可用來實現緩存。
3.排序。
4.任務隊列。
5.管道。
redis客戶端
可以在redis官網上查看針對各個語言的客戶端,所謂的客戶端就是通過相應的語言接口實現對redis的操作。我是用的python,官方推薦redis-py,可通過pip install redis-py安裝。
redis資料匯總
這里提供幾個實時更新的匯總站。
首先就是redis位於GitHub上的repository的wiki(https://github.com/antirez/redis/wiki),上面提供了一些鏈接,並且你會發現一些是中文鏈接。在scrapy的wiki中也有這樣的現象,你可以發現中國的用戶量了吧。
其次是redis中文網站。
二、scrapy-redis實現scrapy分布式爬取分析的原理
scrapy-redis原理:
1.spider解析下載器下載下來的response,返回item或者是links
2.item或者links經過spidermiddleware的process_spider_out()方法,交給engine。
3.engine將item交給itempipeline,將links交給調度器
4.在調度器中,先將request對象利用scrapy內置的指紋函數,生成一個指紋對象
5.如果request對象中的dont_filter參數設置為False,並且該request對象的指紋不在信息指紋的隊列中,那么就把該request對象放到優先級的隊列中
6.從優先級隊列中獲取request對象,交給engine
7.engine將request對象交給下載器下載,期間會通過downloadmiddleware的process_request()方法
8.下載器完成下載,獲得response對象,將該對象交給engine,期間會通過downloadmiddleware的process_response()方法
9.engine將獲得的response對象交給spider進行解析,期間會經過spidermiddleware的process_spider_input()方法
10.從第一步開始循環
上面的十個步驟就是scrapy-redis的整體框架,與scrapy相差無幾。本質的區別就是,將scrapy的內置的去重的隊列和待抓取的request隊列換成了redis的集合。就這一個小小的改動,就使得了scrapy-redis支持了分布式抓取。
三、需要用到的模塊
- scrapy
- scrapy-redis
- redis
- mysql :收集來的數據存放到mysql中
- python的mysqldb模塊
- python的redis模塊
后面倆個庫:python不能直接操作數據庫,需要通過庫來支持。而這2個就是相應數據庫的支持庫。
結構化數據可以使用mysql節省空間,非結構化、文本等數據可以采用mongodb等非關系型數據提高訪問速度。
參考文章來源:
http://blog.csdn.net/u012150179/article/details/38077851
http://blog.csdn.net/howtogetout/article/details/51633814