في عالم اليوم الرقمي ، كل إجراء - سواء كان يتم تمريره على تطبيق المواعدة أو إكمال عملية شراء - على واجهات برمجة التطبيقات التي تعمل بكفاءة وراء الكواليس. كمطورين خلفيين ، نعلم أن كل ميلي ثانية تهم. ولكن كيف يمكننا أن نجعل واجهات برمجة التطبيقات تستجيب بشكل أسرع؟ الإجابة تكمن في التخزين المؤقت.
التخزين المؤقت هو تقنية تخزن البيانات التي يتم الوصول إليها بشكل متكرر في الذاكرة ، مما يسمح لبرامج واجهات برمجة التطبيقات بالاستجابة على الفور بدلاً من الاستعلام عن قاعدة بيانات أبطأ في كل مرة. فكر في الأمر مثل الاحتفاظ بالمكونات الرئيسية (الملح والفلفل والزيت) على كونترتوب المطبخ الخاص بك بدلاً من جلبها من المخزن في كل مرة تطبخ فيها - وهذا يوفر الوقت ويجعل العملية أكثر كفاءة. وبالمثل ، فإن التخزين المؤقت يقلل من أوقات استجابة API عن طريق تخزين البيانات المطلوبة بشكل شائع في بقعة سريعة يمكن الوصول إليها ، مثل redis.
يجب تثبيت المكتبات المطلوبة
للتواصل مع Redis Cache مع Fastapi ، نطلب أن تكون المكتبات التالية مثبتة مسبقًا.
pip install fastapi uvicorn aiocache pydantic
Pydantic هو إنشاء جداول وهياكل قاعدة البيانات. سوف Aiocache القيام بعمليات غير متزامنة على ذاكرة التخزين المؤقت. Uvicorn مسؤول عن تشغيل الخادم.
redis إعداد والتحقق:
إعداد redis مباشرة في نظام Windows غير ممكن في هذا المرحلة. لذلك ، يجب إعداده وتشغيله في نظام Windows الفرعي لـ Linux. ترد أدناه تعليمات لتثبيت WSL أدناه
تثبيت WSL | Microsoft تعلم
قم بتثبيت نظام Windows الفرعي لـ Linux باستخدام الأمر ، WSL -مثبت. استخدم محطة Bash على جهاز Windows الذي يتم تشغيله بواسطة توزيع Linux المفضل لديك - Ubuntu و Debian و Suse و Kali و Fedora و Pengwin و Alpine والمزيد.
Learn.microsoft.com
بعد تثبيت WSL ، هناك حاجة إلى الأوامر التالية لتثبيت redis
sudo apt update
sudo apt install redis-server
sudo systemctl start redis
لاختبار اتصال خادم Redis ، يتم استخدام الأمر التالي
redis-cli
بعد هذا الأمر ، سيتم الدخول في محطة افتراضية للمنفذ 6379. في تلك المحطة ، يمكن كتابة أوامر redis.
إعداد تطبيق fastapi
] سوف نستخدم redis لتخزين الاستجابات المخزنة مؤقتًا.
الخطوة 1: تحديد نموذج Pydantic لبيانات المستخدم
سنستخدم Pydantic لتحديد نموذج المستخدم الخاص بنا ، والذي يمثل بنية استجابة API.
من Pydantic Import Basemodel
مستخدم الفئة (Basemodel):
معرف: int
الاسم: شارع
البريد الإلكتروني: str
العمر: int
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
الخطوة 2: إنشاء ديكور التخزين المؤقت
لتجنب تكرار منطق التخزين المؤقت لكل نقطة نهاية ، سنقوم بإنشاء ديكور تخزين مؤقت قابل لإعادة الاستخدام باستخدام مكتبة Aiocache. سيحاول هذا الديكور استرداد الاستجابة من redis قبل استدعاء الوظيفة الفعلية.
استيراد JSON
من لفائف استيراد functools
من ذاكرة التخزين المؤقت للاستيراد Aiocache
من fastapi استيراد httpexception
def cache_response (ttl: int = 60 ، مساحة الاسم: str = "main"):
"" "
التخزين المؤقت للديكور لنقاط النهاية fastapi.
TTL: حان الوقت للعيش في ذاكرة التخزين المؤقت في ثوان.
مساحة الاسم: مساحة الاسم لمفاتيح ذاكرة التخزين المؤقت في Redis.
"" "
ديكور ديكور (FUNC):
@wraps (func)
غلاف Def Async (*args ، ** kwargs):
user_id = kwargs.get ('user_id') أو args [0] # على افتراض أن معرف المستخدم هو الوسيطة الأولى
cache_key = f "{namepace}: user: {user_id}"
Cache = cache.redis (Endpoint = "LocalHost" ، Port = 6379 ، مساحة الاسم = مساحة الاسم)
# حاول استرداد البيانات من ذاكرة التخزين المؤقت
cached_value = انتظر cache.get (cache_key)
إذا كان cached_value:
إرجاع json.loads (cached_value) # إرجاع البيانات المخزولة
# اتصل بالوظيفة الفعلية إذا لم يتم ضرب ذاكرة التخزين المؤقت
الرد = في انتظار func (*args ، ** kwargs)
يحاول:
# تخزين الاستجابة في redis مع TTL
Await Cache.set (cache_key ، json.dumps (استجابة) ، ttl = ttl)
باستثناء استثناء كـ e:
رفع httpexception (status_code = 500 ، التفاصيل = f "بيانات التخزين المؤقت للخطأ: {e}")
استجابة العودة
إرجاع غلاف
ديكور إرجاع
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
الخطوة 3: تنفيذ مسار fastapi للحصول على تفاصيل المستخدم
سنقوم الآن بتنفيذ مسار fastapi يسترجع معلومات المستخدم استنادًا إلى معرف المستخدم. سيتم التخزين المؤقت للاستجابة باستخدام redis للوصول بشكل أسرع في الطلبات اللاحقة.
من fastapi استيراد fastapi
التطبيق = fastapi ()
# عينة من البيانات التي تمثل المستخدمين في قاعدة بيانات
users_db = {
1: {"id": 1 ، "name": "alice" ، "البريد الإلكتروني": "
[email protected]" ، "العمر": 25} ،
2: {"id": 2 ، "name": "Bob" ، "Email": "
[email protected]" ، "Age": 30} ،
3: {"id": 3 ، "name": "Charlie" ، "Email": "
[email protected]" ، "Age": 22} ،
}
@app.get ("/المستخدمين/{user_id}")
cache_response (TTL = 120 ، مساحة الاسم = "المستخدمين")
async def get_user_details (user_id: int):
# محاكاة مكالمة قاعدة بيانات عن طريق استرداد البيانات من user_db
user = users_db.get (user_id)
إذا لم يكن المستخدم:
رفع httpexception (status_code = 404 ، التفاصيل = "لم يتم العثور على المستخدم")
إرجاع المستخدم
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
الخطوة 4: تشغيل التطبيق
ابدأ تطبيق fastapi الخاص بك عن طريق التشغيل:
Uvicorn Main: App -Reload
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
الآن ، يمكنك اختبار واجهة برمجة التطبيقات عن طريق جلب تفاصيل المستخدم عبر:
http://127.0.0.1:8000/users/1
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
سوف يجلب الطلب الأول البيانات من user_db ، لكن الطلبات اللاحقة سترجع البيانات من redis.
اختبار ذاكرة التخزين المؤقت
يمكنك التحقق من ذاكرة التخزين المؤقت عن طريق فحص المفاتيح المخزنة في Redis. افتح redis cli:
redis-cli
مفاتيح *
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
ستحصل على جميع المفاتيح التي تم تخزينها في Redis Till TTL.
كيف يعمل التخزين المؤقت في هذا المثال
الطلب الأول
: عندما يتم طلب بيانات المستخدم لأول مرة ، فإن واجهة برمجة التطبيقات (API) تجلبها من قاعدة البيانات (users_db) وتخزن النتيجة في إعادة تدوينها مع وقت واحد (TTL) من 120 ثانية.
الطلبات اللاحقة:
يتم تقديم أي طلبات لاحقة لنفس المستخدم خلال فترة TTL مباشرة من redis ، مما يجعل الاستجابة أسرع وتقليل الحمل على قاعدة البيانات.
TTL (حان الوقت للعيش):
بعد 120 ثانية ، ينتهي إدخال ذاكرة التخزين المؤقت ، ويتم جلب البيانات من قاعدة البيانات مرة أخرى على الطلب التالي ، تحديث ذاكرة التخزين المؤقت.
خاتمة
في هذا البرنامج التعليمي ، لقد أوضحنا كيفية تنفيذ التخزين المؤقت Redis في تطبيق Fastapi باستخدام مثال تفاصيل مستخدم بسيط. من خلال التخزين المؤقت لاستجابات API ، يمكنك تحسين أداء التطبيق الخاص بك بشكل كبير ، خاصة بالنسبة للبيانات التي لا تتغير بشكل متكرر.
يرجى القيام بتصويت ومشاركة إذا وجدت هذه المقالة مفيدة.