CodeGym /Kurslar /Python SELF AZ /Məlumatların yadda saxlanması və keşlənməsi

Məlumatların yadda saxlanması və keşlənməsi

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Kəşləmə niyə lazımdır?

Deməli, uşaqlar, gəldik veb skreypinqin ən maraqlı hissələrindən birinə — məlumatların kəşlənməsi. Niyə kəşləmə? Çünki bu, sanki öz "beş dəqiqəlik rekordunu" skriptlərlə çalışmaqda qoymağa bənzəyir! Gəlin anlayaq, bu niyə lazımdır və necə işləyir, amma sadə dildə, baş qarışmasın.

Təsəvvür edin: veb skreypinq etdiniz, lazım olan bütün məlumatları əldə etdiniz və sabah onları yeniləmək istəyirsiniz. Görəsən, yenə sonsuz sorğular dövranına girməlisiniz? Yox, təkrarlanan işlərdən qaçmaq və məlumatları kəşləmə vasitəsilə saxlamaq olar.

Kəşləmənin üstünlükləri:

  • Tezlik: Kəşlənmiş məlumatlara serverdən yenidən yükləməkdən daha tez çatılır. Bu, sevimli pirojnaya tez çıxışı olan kimi bir şeydir: artıq çörəkxanaya getmək lazım deyil, pirojna soyuducuda hazırdır!
  • Qənaət: Həm serveri artıq sorğularla yükləmirsiniz, həm də internet trafikinizə qənaət edirsiniz. Əla əlavə bonus!
  • Davamlılıq: Kəşləmə əlaqə problemləri zamanı kömək edir. Əgər veb sayt qəflətən əlçatmaz olsa belə, məlumatlar sizinlə qalır. Sanki ehtiyat paraşütün olması kimidir.

2. Data caching əsasları

Caching nədir?

Cache — əvvəldən əldə edilmiş məlumatların təkrar istifadəsini təmin edən müvəqqəti saxlama yeri. Proqramlaşdırmada caching eyni məlumatlara təkrar sorğunu etməməyə kömək edir. Təsəvvür edin ki, cache sizin tez-tez istifadə etdiyiniz məlumatlar üçün şəxsi kitabxananızdır.

Cache növləri:

  • Memory cache: Sürətlidir, amma enerjinin kəsilməsi ilə sıfırlanır. Operativ yaddaş kimi çalışır.
  • File cache: Məlumatlar disklərdə saxlanılır, daha davamlı və etibarlıdır.

3. Python ilə Praktiki Keşləmə

Python-da məlumatları keşləmək üçün biz requests kitabxanasından istifadə edə bilərik. Amma requests kitabxanası default olaraq keşləməni dəstəkləmir. Burada bizə requests-cache kömək edir. Bu kitabxana sorğularınıza keşləmə əlavə etmək üçün rahat bir yol təklif edir.

Kitabxananın quraşdırılması

Bash

pip install requests-cache

Keşləmənin qurulması

Keşləməyi skriptimizdə quraq:

Python

import requests_cache

# SQLite ilə keşi qururuq
requests_cache.install_cache('demo_cache', expire_after=180)

import requests

# Sorğunu göndəririk
response = requests.get('https://jsonplaceholder.typicode.com/todos/1')

# Cavabın haradan gəldiyini yoxlayırıq
print(f'Datanın keşdən gəlməsi: {response.from_cache}')

# Məlumatları çap edirik
print(response.json())

Əvvəlcə biz requests_cache.install_cache vasitəsilə keşi qururuq. Bu, keşlənmiş məlumatları saxlamaq üçün SQLite bazası yaradacaq. expire_after parametri keşlənmiş məlumatların silinəcəyi vaxtı (saniyələrlə) göstərir. Burada biz üç dəqiqə üçün keşi quraşdırdıq.

Keşləmənin xüsusiyyətləri

Bu kodu yenidən işlətdiyinizdə, response.from_cache-ə diqqət yetirin. Bu dəyişən ilk üç dəqiqə ərzində edilən sonrakı çağırışlar üçün True olacaq.

Keşi silmək

Keşi silmək asandır: baza faylını silin və ya keşi tam təmizləmək üçün requests_cache.clear() metodundan istifadə edin.

4. Genişləndirilmiş kəşləmə imkanları

Şərtlərlə kəşləmə

Bəzən sizə daha idarə olunan kəşləmə lazım ola bilər. Məsələn, əgər məlumatlar köhnəlmişdirsə və ya sorğu parametrləri dəyişilibsə, onları kəşləməyə ehtiyac yoxdur.

Belə hallarda əlavə parametrlərlə requests-cache istifadə edə bilərsiniz:

Python

requests_cache.install_cache('custom_cache',
             allowable_methods=['GET', 'POST'],
             allowable_codes=[200, 404],
             ignored_parameters=['timestamp'])

Burada biz GETPOST metodları və yalnız 200 və 404 kodları ilə cavablar üçün kəşləməyə icazə veririk. Həmçinin biz timestamp parametrini nəzərə almırıq, belə ki, fərqli zaman etiketləri ilə olan sorğular fərqli sayılmasın.

Redis ilə işləmək

Əgər daha güclü həll yolu, məsələn paylanmış kəşləmə dəstəyi lazımdırsa, redis istifadə edə bilərsiniz. Bu, böyük məlumat dünyasında populyar olan yaddaşa əsaslanan məlumat kəşləmə sistemidir.

İş mərhələləri:

  1. Redis və Python kitabxanasını qurun:
    Bash
    
    brew install redis  # macOS istifadəçiləri üçün
    pip install redis
    
  2. Redis-i layihənizdə qurun:
    Python
    
    import redis
    import requests
    
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    def get_cached_response(url):
        if r.get(url):
            return r.get(url).decode('utf-8')
        else:
            response = requests.get(url)
            r.setex(url, 3600, response.text)  # 1 saata qədər kəşləyirik
            return response.text
    
    print(get_cached_response('https://jsonplaceholder.typicode.com/todos/1'))
    

Bu nümunə Redis-dən istifadə edərək cavabları 1 saat müddətində saxlayır. Biz yoxlayırıq ki, kəşdə məlumat var ya yox, və yalnız onların olmaması halında HTTP-sorğu yerinə yetiririk.

5. Xətaların idarə olunması

Keşləmə ilə işləyərkən bəzən baza zədələnə bilər və ya keş yenilənməyə bilər. Belə hallarda loq aparmaq və məlumatları mütəmadi yoxlamaq yaxşı praktikadır.

Loq aparmaq üçün kod nümunəsi:

Python

import logging

logging.basicConfig(level=logging.INFO)

try:
    response = get_cached_response('https://jsonplaceholder.typicode.com/todos/1')
    logging.info("Məlumatlar keşdən uğurla çıxarıldı")
except Exception as e:
    logging.error("Məlumatların çıxarılması zamanı səhv baş verdi: %s", str(e))

Son fikirlər

Kəşləmə təkcə işinizi sürətləndirmək üçün bir alət deyil. Bu, tətbiqlərinizi daha etibarlı və müvəqqəti şəbəkə problemlərinə və ya serverlərin yüklənmə hallarına davamlı etmək üçün bir yoldur. requests-cache və ya redis kimi alətlərdən istifadə edərək sorğuları effektiv idarə etmək və məlumatları sonrakı istifadə üçün saxlamaq mümkündür. Kəş-ustası olun və skriptlərinizi artıq sorğularla yormayın! Və köhnə proqramçı deyiminə görə: "Bir dəfə kəşləmək, yüz dəfə soruşmaqdan yaxşıdır".

1
Опрос
Parçalama məhdudiyyətlərini keçmək üçün viktorina,  34 уровень,  4 лекция
недоступен
Parçalama məhdudiyyətlərini keçmək üçün viktorina
Parçalama məhdudiyyətlərini keçmək üçün viktorina
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION