Scrapy_redis分布式原理

今天分享一下Scrapy_redis分布式原理:
1 scrapy_redis是什么

Scrapy_redis : Redis-based components for Scrapy.

Github地址:

在这个地址中存在三个demo,后续我们对scrapy_redis的使用会通过这三个demo展开

2 为什么要学习scrapy_redis

Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,具体体现在:

  • 请求对象的持久化
  • 去重的持久化
  • 和实现分布式

3 scrapy_redis的原理分析

3.1 回顾scrapy的流程

那么,在这个基础上,如果需要实现分布式,即多台服务器同时完成一个爬虫,需要怎么做呢?

3.2 scrapy_redis的流程

  • 在scrapy_redis中,所有的带抓取的对象和去重的指纹都存在所有的服务器公用的redis中
  • 所有的服务器公用一个redis中的request对象
  • 所有的request对象存入redis前,都会在同一个redis中进行判断,之前是否已经存入过
  • 在默认情况下所有的数据会保存在redis中

具体流程如下:

Scrapy_redis分布式原理

4 对于redis的复习

很多人对redis的命令遗忘的差不多了, 但是在scrapy_redis中需要使用redis的操作命令,所有需要回顾下redis的命令操作

4.1 redis是什么

redis是一个开源的内存型数据库,支持多种数据类型和结构,比如列表、集合、有序集合等,同时可以使用redis-manger-desktop等客户端软件查看redis中的数据,关于redis-manger-desktop的使用可以参考扩展阅读

4.2 redis服务端和客户端的启动

  • /etc/init.d/redis-server start 启动服务端
  • `redis-cli -h

4.3 redis中的常见命令

  1. select 1 切换db
  2. keys * 查看所有的键
  3. tyep 键 查看键的类型
  4. flushdb 清空db
  5. flushall 清空数据库

4.4 redis命令的复习

redis的命令很多,这里我们简单提及一下后续会使用的命令:

列表:

LPUSH mylist “world” >向mylist从左边添加一个值

LRANGE mylist 0 -1 >返回mylist中所有的值

LLEN mylis >返回mylist的长度

set:

redis> SADD myset “Hello” >往set中添加数据

SMEMBERS mysetredis> >获取myset中所有的元素

redis>SCARD myset >scrad 获取数量

zset:

redis> ZADD myzset 1 “one”

(integer) 1

redis> ZADD myzset 2 “two” 3 “three”

(integer) 2

redis> ZRANGE myzset 0 -1 WITHSCORES

1) “one”

10

3″two”

4)121

5″three”

6)131

redis> ZCARD myzset

zadd 向一个zset中添加一个值和分数,如果存在值就更新分数,分数可以相同zrange 遍历myzesetzcard 返回zset中元素的数量

Original: https://blog.csdn.net/ljf520lhy/article/details/128337083
Author: 不喜欢穿格子衫的程序员
Title: Scrapy_redis分布式原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/792517/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球