Redis是什么
Redis是什么
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
基于内存运行,性能高效
支持分布式,理论上可以无限扩展
key-value存储系统
开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
相比于其他数据库类型,Redis具备的特点是:
C/S通讯模型
单进程单线程模型
丰富的数据类型
操作具有原子性
持久化
高并发读写
支持lua脚本
Redis的应用场景有哪些?
Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。
Redis的数据类型及主要特性
Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和顺序集合类型。
爬虫系统设计
爬虫系统的组成部
爬虫的组件
下载任务
解析任务
检测任务
调度中心
任务队列
数据仓库
代理任务
从中可以清晰的看出整个爬虫系统 在单机的状态是如何工作的,其实整个系统看起来就是消费者和生产者的关系,所以需要一个装载任务的容器,那么这个容器要有基本的要求:断点续传,能够在项目意外暂停的时候,保存未消费的任务状态,记录已经消费的任务状态,这样当项目重启的时候,能够加载未消费的任务然后继续消费?给出两种方案:
一、通过数据库记录每一条任务的状态,比如添加一个selected字段标识这条任务是否在队列,添加status字段标识这条任务是否被消费过,一旦任务消费了,立马改变status字段状态,selected状态,这样系统突然停止的话,根据selected标识还未被消费的状态,然后把这部分数据添加到系统的任务队列之中,这样的策略虽然能够达到要求,但是不足的地方要不断的和数据库进行通信,要经受大量的写请求,那么要求数据库对表级锁的支持要必须好,性能方面不适合大规模的抓取任务。
二、通过文件存储来实现对任务状态的记录,每次任务队列中拿到的数据都会存储到一个文件中,按照文件大小做rollingFile,那么每一个新的任务加进来,都会首先被放到一个head文件,当head文件不停增长的时候,到一定大小的时候,一个新的head文件就会被加进来,同时有一个checkpoint的文件,记录任务的消费状态,难么当系统异常重启的时候,通过checkpoint文件定位到已经消费到的文件位置,然后把对应位置以后的所有任务都添加到任务队列中,达到记录任务的状态与持久化存储。
- 点赞
- 收藏
- 关注作者
评论(0)