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)
- 原先配置:
- 修改结果:
注意:修改过后,redis.windows.conf文件,一定要重新启动redis服务。重启步骤
- 对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) 效果:所有爬虫都开始运行,并且数据还都不一样