作者:致力于流浪动物救助量 | 来源:互联网 | 2023-10-13 10:42
一、redis相关全称为remotedictionaryserver。国内使用到的公司也很多。其关键字可以归纳为:1.开源并以实际应用驱动。2.key-value这种KV特性将
一、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