redis如何实现持久化(python)--------------------------落雨成风

Redis如何做持久化

持久化: 把数据存放到断电也不会丢失的设备中,例如: 文件, mysql

如何实现持久化

快照(RDB)

是redis默认做持久化的方式

实现原理:

​ redis是由C语言实现的,fork函数,会把主进程复制一个子进程, 子进程会把内存的数据依次遍历出来,存放到配置指定的二进制文件dump.rdb中。

实现快照:

​ 只要更改配置文件,默认提供额三种级别的快照形式

优点

  1. 使用起来简单,只要修改配置文件,把所有的数据存放到一个文件中,
  2. 文件以二进制形式存放,读写很快

缺点

​ 断电容易造成数据丢失,断电的时间段内的数据不能备份

AOF(Append only file),

以日志文件追加的方式实现的

实现原理: 把所有内存中数据以writer追加的方法写道日志文件中。

实现: 修改配置文件,

优点

  1. 使用起来简单,只要修改配置文件, 日志文件是单独文件
  2. 可以修改日志文件得大小:BGREWRITERAOF

缺点

  1. 大小的限制,
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy-Redis是基于Scrapy框架和Redis数据库的分布式爬虫。它是一种高效、可靠、易于扩展的解决方案,可以处理大规模的数据爬取任务。 本教学将介绍如何使用Scrapy-Redis搭建一个分布式爬虫,并通过Redis实现任务调度和数据传输。 1. 安装Scrapy-Redis 首先需要安装Scrapy-Redis库,可以通过pip命令进行安装: ``` pip install scrapy-redis ``` 2. 配置Redis数据库 Scrapy-Redis需要使用Redis数据库作为数据传输和任务调度的中心。可以在本地或云服务器上安装Redis,并配置好相关参数。 在settings.py中添加Redis相关配置: ```python REDIS_HOST = 'localhost' # Redis数据库主机 REDIS_PORT = 6379 # Redis数据库端口 REDIS_PARAMS = {'password': '123456'} # Redis数据库密码 REDIS_ENCODING = 'utf-8' # Redis数据库编码 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 去重过滤器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 调度器 SCHEDULER_PERSIST = True # 是否持久化调度器 SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue' # 优先级队列 ``` 3. 编写Spider 创建一个简单的Spider,用于爬取目标网站的数据。这里以爬取豆瓣电影Top250为例。 ```python import scrapy class DoubanMovieSpider(scrapy.Spider): name = 'douban_movie' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): for movie in response.css('.item'): yield { 'title': movie.css('.title::text').get(), 'rating': movie.css('.rating_num::text').get(), 'link': movie.css('.hd a::attr(href)').get() } next_page = response.css('.next a::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) ``` 4. 修改Spider为RedisSpider 将Spider修改为RedisSpider,继承自RedisSpider类,并指定start_urls_key和redis_batch_size参数。 ```python import scrapy from scrapy_redis.spiders import RedisSpider class DoubanMovieSpider(RedisSpider): name = 'douban_movie' allowed_domains = ['movie.douban.com'] redis_key = 'douban_movie:start_urls' redis_batch_size = 10 def parse(self, response): for movie in response.css('.item'): yield { 'title': movie.css('.title::text').get(), 'rating': movie.css('.rating_num::text').get(), 'link': movie.css('.hd a::attr(href)').get() } next_page = response.css('.next a::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) ``` 5. 添加RedisPipeline 创建一个RedisPipeline,用于将爬取到的数据保存到Redis数据库中。 ```python import json import redis class RedisPipeline(object): def __init__(self, redis_host, redis_port, redis_password): self.redis_host = redis_host self.redis_port = redis_port self.redis_password = redis_password @classmethod def from_crawler(cls, crawler): return cls( redis_host=crawler.settings.get('REDIS_HOST'), redis_port=crawler.settings.get('REDIS_PORT'), redis_password=crawler.settings.get('REDIS_PARAMS').get('password') ) def open_spider(self, spider): self.redis_client = redis.Redis( host=self.redis_host, port=self.redis_port, password=self.redis_password ) def close_spider(self, spider): pass def process_item(self, item, spider): self.redis_client.lpush(spider.name + ':items', json.dumps(item)) return item ``` 6. 启动爬虫 启动爬虫,将初始URL添加到Redis数据库中: ``` redis-cli lpush douban_movie:start_urls https://movie.douban.com/top250 ``` 启动爬虫: ``` scrapy crawl douban_movie ``` 7. 查看爬取结果 通过Redis命令行客户端查看爬取结果: ``` redis-cli lrange douban_movie:items 0 -1 ``` 可以看到,爬取到的数据已经保存到Redis数据库中。 以上就是使用Scrapy-Redis搭建分布式爬虫的教学。通过Redis实现任务调度和数据传输,可以让爬虫更加高效、可靠、易于扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值