Item Pipeline
将 Spider 爬取到的 Item 给 scrapy-redis 的 Item Pipeline,将爬取到的 Item 存入 redis
的 items 队列。可以很方便的从 items 队列中提取 item,从而实现 items processes 集群。
2.2.2.2、问题
1、 为什么使用 redis
redis 的特性体现在“内存数据库”和“KV”存储方式上,前者决定其性能,后者决定其存储
内容的易于组织性。
reidis 的使用适合链接的大量存取、快速调度的使用情景,最主要的是,由于链接需要的
存储空间有限,内存的容量并不构成存储瓶颈,这时,存取速度(每秒十万次左右)便称为
了 redis 的极大优势。
2、 redis master + slave
1、原理
在 Slave 启动并连接到 Master 之后,它将主动发送一个 SYNC 命令。此后 Master 将启
动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,
Master 将传送整个数据库文件到 Slave,以完成一次完全同步。而 Slave 服务器在接收到数
据库文件数据之后将其存盘并加载到内存中。此后,Master 继续将所有已经收集到的修改
命令,和新的修改命令依次传送给 Slaves,Slave 将在本次执行这些数据修改命令,从而达
到最终的数据同步。
将原来项目中 scrapy 框架拆分为两部分:Master 和 Slave,如下图所示:
2、配置
同时启动两个 Redis 服务器,分别监听不同的端口,如 6379 和 6380。长期保证这
两个服务器之间的 Replication 关系,需 要 在 redis_6380 的配置文件中做如下修改 slaveof
127.0.0.1 6379(Master 和 Slave 在同一台主机,Master 的端口为 6379)。
3、 scrapy-redis 原理
scrapy-redis 是为了更方便地实现 scrapy 分布式爬取,Scrapy 本身是不支持分布式的,
因为它的任务管理和去重全部是在机器内存中实现的。
他们使用了 redis 数据库来替换 scrapy 原本使用的队列结构(deque),换了数据结构,
相应的操作都要换,所以与队列相关的这些组件都做了更换。
scrapy-redis 提供了一个解决方法,把 deque 换成 redis 数据库,我们从同一个 redis 服
评论0