Rumah  >  Artikel  >  pangkalan data  >  Kaedah Redis dan contoh aplikasi untuk melaksanakan perangkak teragih

Kaedah Redis dan contoh aplikasi untuk melaksanakan perangkak teragih

王林
王林asal
2023-05-11 16:54:321182semak imbas

Dengan populariti Internet dan skala data yang semakin meningkat, aplikasi teknologi perangkak menjadi semakin meluas. Walau bagaimanapun, apabila jumlah data terus berkembang, perangkak mesin tunggal tidak lagi dapat memenuhi keperluan sebenar. Teknologi perangkak teragih muncul mengikut keperluan masa, antaranya Redis ialah alat perangkak teragih yang sangat baik. Artikel ini akan memperkenalkan kaedah dan contoh aplikasi Redis untuk melaksanakan perangkak teragih.

1. Prinsip perangkak teragih Redis

Redis ialah pangkalan data bukan perkaitan dalam perangkak teragih, ia digunakan sebagai cache dan baris gilir data, dan merupakan cara penting untuk mencapai pengedaran .

Dalam Redis, anda boleh menggunakan jenis Senarai untuk melaksanakan baris gilir. Redis menyediakan arahan LPUSH dan RPUSH untuk memasukkan data ke dalam kepala dan ekor baris gilir. Pada masa yang sama, arahan LPOP dan RPOP juga disediakan untuk memaparkan data dalam baris gilir dan memadam data yang muncul.

Melalui Redis, tugasan boleh diagihkan antara pelbagai proses perangkak untuk meningkatkan kecekapan dan kelajuan perangkak.

2. Pelaksanaan khusus perangkak edaran Redis

  1. Gunakan Redis untuk menyimpan URL yang hendak dirangkak

Apabila merangkak data halaman web, anda mesti Tentukan terlebih dahulu baris gilir URL untuk dirangkak. Apabila menggunakan Redis, kami boleh menambah URL untuk dirangkak ke penghujung baris gilir melalui RPUSH. Pada masa yang sama, arahan LPOP digunakan untuk mengeluarkan baris gilir dari kepala dan mendapatkan URL untuk dirangkak.

Kod khusus adalah seperti berikut:

import redis

# 初始化Redis数据库
client = redis.Redis(host='localhost', port=6379, db=0)

# 将待抓取的URL加入到队列末尾
client.rpush('url_queue', 'http://www.example.com')

# 从队列头部弹出URL
url = client.lpop('url_queue')
  1. Proses perangkak dan peruntukan tugas

Dalam perangkak yang diedarkan, tugasan perlu diberikan kepada berbilang perangkak proses. Untuk mencapai pengagihan tugas teragih, berbilang baris gilir boleh dibuat dalam Redis, dan setiap proses perangkak memperoleh tugas daripada baris gilir yang berbeza. Apabila memberikan tugasan, algoritma Round-robin digunakan untuk mencapai pengagihan tugas yang sekata.

Kod khusus adalah seperti berikut:

import redis

# 初始化Redis数据库
client = redis.Redis(host='localhost', port=6379, db=0)

# 定义爬虫进程个数
num_spiders = 3

# 将任务分配给爬虫进程
for i in range(num_spiders):
    url = client.lpop('url_queue_%d' % i)
    if url:
        # 启动爬虫进程进行任务处理
        process_url(url)
  1. Penyimpanan data perangkak

Dalam perangkak teragih, data perangkak perlu disimpan dalam yang sama pangkalan data. Bagi mencapai pengumpulan dan analisis data. Pada ketika ini, jenis data Hash Redis boleh memainkan peranan penting. Gunakan tatasusunan Hash Redis untuk menyimpan nombor dan kandungan data perangkak untuk memudahkan pemprosesan data dan statistik seterusnya.

Kod khusus adalah seperti berikut:

import redis

# 初始化Redis数据库
client = redis.Redis(host='localhost', port=6379, db=0)

# 存储爬虫数据
def save_data(data):
    client.hset('data', data['id'], json.dumps(data))

3. Contoh aplikasi perangkak teragih Redis

Teknologi perangkak teragih Redis digunakan secara meluas, termasuk perlombongan data, enjin carian, kewangan analisis dan bidang lain. Berikut mengambil Scrapy-Redis, rangka kerja perangkak teragih berdasarkan Redis, sebagai contoh untuk memperkenalkan pelaksanaan perangkak teragih.

  1. Pasang Scrapy-Redis

Scrapy-Redis ialah alat perangkak teragih yang dibangunkan berdasarkan rangka kerja Scrapy, yang boleh merealisasikan perkongsian data dan pengagihan tugas antara berbilang proses perangkak. Apabila melakukan rangkak teragih, Scrapy-Redis perlu dipasang.

pip install scrapy-redis
  1. Konfigurasikan Scrapy-Redis dan Redis

Apabila merangkak Scrapy-Redis, anda perlu mengkonfigurasi Scrapy-Redis dan Redis. Tetapan Scrapy-Redis adalah serupa dengan rangka kerja Scrapy dan boleh ditetapkan dalam fail settings.py. Scrapy-Redis perlu menggunakan Redis untuk melaksanakan baris gilir tugas dan perkongsian data, jadi adalah perlu untuk mengkonfigurasi maklumat berkaitan pangkalan data Redis.

# Scrapy-Redis配置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"  # 使用Redis调度(Scheduler)
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"  # 使用Redis去重(Dupefilter)

# Redis数据库配置
REDIS_URL = 'redis://user:password@localhost:6379'
  1. Tulis kod perangkak Scrapy-Redis

Apabila melakukan perangkak Scrapy-Redis, pelaksanaan kod utama adalah serupa dengan rangka kerja Scrapy. Satu-satunya perbezaan ialah anda perlu menggunakan kelas RedisSpider yang disediakan oleh Scrapy-Redis untuk menggantikan kelas Spider asal untuk melaksanakan operasi dan pengagihan tugas pada pangkalan data Redis.

import scrapy
from scrapy_redis.spiders import RedisSpider


class MySpider(RedisSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'myspider_redis'
    redis_key = 'myspider:start_urls'

    def parse(self, response):
        """This function parses a sample response. Some contracts are mingled
        with this docstring.

        @url http://www.example.com/
        @returns items 1
        @returns requests 1
        """
        item = MyItem()
        item['title'] = response.xpath('//title/text()').extract_first()
        yield item

4. Ringkasan

Melaksanakan perangkak teragih bukan sahaja dapat meningkatkan kecekapan dan kelajuan perangkak, tetapi juga mengelakkan risiko satu titik kegagalan. Sebagai alat caching dan baris gilir data yang sangat baik, Redis boleh memainkan peranan yang sangat baik dalam perangkak teragih. Melalui kaedah dan contoh aplikasi Redis yang melaksanakan perangkak teragih yang diperkenalkan di atas, anda boleh lebih memahami pelaksanaan perangkak teragih dan kelebihan Redis.

Atas ialah kandungan terperinci Kaedah Redis dan contoh aplikasi untuk melaksanakan perangkak teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn