redis分布式介紹
-
什麼是分布式
一個系統分為很多個子系統,這些子系統互相配合完成整個的業務邏輯叫做分布式,分布式中每一個節點都可以配置叢集。
- Redis 是一個基于記憶體的高性能key-value資料庫。
-
redis 特點和優勢
(1)特點:
- Redis本質上是一個Key-Value類型的記憶體資料庫,很像memcached,整個資料庫統統加載在記憶體當中進行操作,定期通過異步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB。
- Redis的出色之處不僅僅是性能,Redis最大的魅力是支援儲存多種資料結構,此外單個value的最大限制是1GB,不像 memcached隻能儲存1MB的資料,是以Redis可以用來實作很多有用的功能,比方說用他的List來做FIFO雙向連結清單,實作一個輕量級的高性 能消息隊列服務,用他的Set可以做高性能的tag系統等等。另外Redis也可以對存入的Key-Value設定expire時間,是以也可以被當作一 個功能加強版的memcached來用。
-
Redis的主要缺點是資料庫容量受到實體記憶體的限制,不能用作海量資料的高性能讀寫,是以Redis适合的場景主要局限在較小資料量的高性能操作和運算上。
(2)優勢:
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的資料類型 – Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。
搭建分布式爬蟲
-
安裝scrapy_redis庫;
指令:
pip install scrapy_redis
- 導包,修改爬蟲項目中爬蟲檔案的類的繼承,并且類需要繼承自RedisSpider;
原來代碼:
class XiaohuaSpider(scrapy.Spider):
pass
修改後為:
from scrapy_redis.spiders import RedisSpider
class XiaohuaSpider(RedisSpider):
pass
-
将爬蟲檔案的類的屬性start_urls注釋掉,并添加redis_key = “任意名稱”;
代碼:
# start_urls = ['http://www.xiaohuar.com/list-1-0.html']
redis_key = "xiaohua1"
- 修改爬蟲檔案的類的屬性custom_settings,并添加配置資訊;
custom_settings = {
"ROBOTSTXT_OBEY": False,
"CONCURRENT_REQUESTS": 16,
"DOWNLOAD_DELAY": 1,
"COOKIES_ENABLED": False,
"ITEM_PIPELINES": {
# Store scraped item in redis for post-processing. 分布式redispipeline
'scrapy_redis.pipelines.RedisPipeline': 299,
# 将爬取的資料存儲到mysql中,定義管道檔案
'xiaohuaSqider.pipelines.MySQLTwistedPipeline': 300,
},
""" scrapy-redis配置 """
# Enables scheduling storing requests queue in redis.
"SCHEDULER": "scrapy_redis.scheduler.Scheduler",
# Ensure all spiders share same duplicates filter through redis.
"DUPEFILTER_CLASS": "scrapy_redis.dupefilter.RFPDupeFilter",
"REDIS_HOST": "192.168.4.193", # 本機ip
"REDIS_PORT": "6379" # redis端口号,預設6379
}
- 修改redis中的redis.windows.conf檔案内容; 新安裝的redis預設狀态下,是bind 127.0.0.1 或者bind localhost,修改為本機ip位址,如(bind 192.168.4.193)
scrapy爬蟲架構中基于redis分布式,資料存儲mysql中
- 原先配置:
scrapy爬蟲架構中基于redis分布式,資料存儲mysql中 - 修改結果: 注意:修改過後,redis.windows.conf檔案,一定要重新啟動redis服務。重新開機步驟
scrapy爬蟲架構中基于redis分布式,資料存儲mysql中
- 對mysql添加遠端通路使用者;
- 建立資料庫使用者(使用者權限為 % 讓從伺服器能通路該資料庫,注意:sql語句 % 兩端需要加引号):
grant all privileges on *.* to '使用者名'@'%' identified by '密碼';
- 重新整理資料庫權限:
flush privileges;
- 啟動redis服務,設定redis主從;
redis-cli.exe -h 192.168.4.193 -p 6379
- 其中192.168.4.193表示本機ip,6379表示端口号。
- 讓從伺服器連接配接
lpush redis_key的值 網址
-
運作爬蟲項目
分布式用到的代碼應該是同一套代碼
1) 先把項目配置為分布式
2) 把項目拷貝到多台伺服器中
3) 把所有爬蟲項目都跑起來
4) 在redis中lpush你的網址即可
5) 效果:所有爬蟲都開始運作,并且資料還都不一樣