💡 تسليط الضوء على الميزات: التخزين المؤقت المستمر للمكونات الإضافية¶
💾 حفظ ذاكرة التخزين المؤقت لضبط الأداء وتحسين الأداء¶
يحتوي النظام على مركز مركزي، وآليات ذاكرة التخزين المؤقت المستمرة (simple_plugin_cache)، وواجهة برمجة التطبيقات الخارجية (مثل Wetter، Übersetzungen، وما إلى ذلك) التي يتم تحديثها وتقليصها. Der Cache ist persistent, d.h. إنه أكثر من مجرد Neustart des Haupt-Services erhalten.
الرابط: Reduzierung der Netzwerklast und Failover auf die Letzte bekannte Antwort bei einem API-Ausfall.
---
### 1. تنشيط التخزين المؤقت (Der Standardfall)
للحصول على وظيفة للتخزين المؤقت، يجب عليك استيراد الوظائف get_cached_result وset_cached_result.
#### 1.1 الواردات والتكوين
Fügen Sie diese Zeilen zu Ihrem Plugin-Skript hinzu (z.B. `weather.py`):
from scripts.py.func.simple_plugin_cache import get_cached_result, set_cached_result
# Definieren Sie eine Time-To-Live (TTL) für Ihre Daten
WEATHER_TTL = 300 # 5 Minuten
1.2 سجل التخزين المؤقت في “التنفيذ” - الحظر¶
يجب عليك كتابة الكود في ثلاثة أجزاء: Prüfen، Ausführen و Speichrn.
def execute(match_data, logger):
# ANNAHME: BASE_DIR_FOR_CACHE ist der stabile Pfad (z.B. der TMP-Ordner)
BASE_DIR_FOR_CACHE = Path(...)
# Der Cache-Key basiert auf allen Argumenten, die das Ergebnis beeinflussen.
cache_key_args = (city, lang)
# --- BLOCK A: PRIMÄRER CACHE-ABRUF (TTL-gesteuert) ---
cached_response = get_cached_result(
BASE_DIR_FOR_CACHE,
'plugin_get_weather', # Eindeutiger Name für die Funktion
cache_key_args,
WEATHER_TTL, # Die TTL für diesen Eintrag
logger=logger
)
if cached_response:
return cached_response # <-- CACHE HIT: Liefere sofort zurück
# --- BLOCK B: NETZWERK-AUFRUF (NUR bei Cache Miss) ---
try:
# Führe hier Ihren CURL/Request-Code aus.
response = "Erfolgreiche Antwort..."
# --- ERFOLG: ERGEBNIS SPEICHERN ---
set_cached_result(BASE_DIR_FOR_CACHE, 'plugin_get_weather', cache_key_args, response)
return response
# --- BLOCK C: FEHLER & FAILOVER (FALLBACK-Strategie) ---
except Exception as e:
logger.warning(f"API-Abruf fehlgeschlagen ({type(e).__name__}). Versuche Fallback...")
# ZWEITER CACHE-ABRUF: Lese den letzten gespeicherten Eintrag, egal wie alt (ttl_seconds=None).
stale_response = get_cached_result(
BASE_DIR_FOR_CACHE,
'plugin_get_weather',
cache_key_args,
logger=logger # Wichtig: TTL wird hier weggelassen/ist None
)
if stale_response:
logger.warning("Liefere ABGELAUFENEN (stale) Cache als Fallback.")
return stale_response
# KEIN FALLBACK VORHANDEN: Liefere die ursprüngliche Fehlermeldung.
return f"Fehler: Daten konnten nicht abgerufen werden und kein Fallback verfügbar. Ursache: {e}"
---
### 2. تخزين مؤقت خاص
أ. التخزين المؤقت الدائم (ذاكرة التخزين المؤقت Ewiger)¶
إذا لم يتم استخدام أي شيء (z.B. عنوان URL لواجهة برمجة التطبيقات (API-URL) الذي لم يتم تحديده بعد)، فاضغط على المعلمة ttl_thans بكل سهولة.
# Abruf (Prüfung)
# Dieser Eintrag läuft nie ab.
cached_result = get_cached_result(BASE_DIR, 'static_config', ('my_key',), logger=logger)
# Speichern
set_cached_result(BASE_DIR, 'static_config', ('my_key',), 'My static value')
#### B. Wichtige Hinweise zum `key_args`
يجب أن تكون معلمة key_args Tupel sein und alle Werte enthalten، die das Ergebnis der Funktion beeinflussen (z.B. (\'Berlin', 'de')).
تتحرك الآلية بشكل تلقائي pathlib.Path - كائن في سلاسل، قبل إنشاء مفتاح ذاكرة التخزين المؤقت، مما يؤدي إلى مشكلة في حل المشكلة.