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ı
pip install requests-cache
Keşləmənin qurulması
Keşləməyi skriptimizdə quraq:
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:
requests_cache.install_cache('custom_cache',
allowable_methods=['GET', 'POST'],
allowable_codes=[200, 404],
ignored_parameters=['timestamp'])
Burada biz GET
və POST
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:
- Redis və Python kitabxanasını qurun:
Bash
brew install redis # macOS istifadəçiləri üçün pip install redis
- 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:
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".
GO TO FULL VERSION