Basics

Cache

Einleitung

Nylo Website v7 bietet ein dateibasiertes Cache-System zum effizienten Speichern und Abrufen von Daten. Caching ist nützlich zum Speichern aufwändiger Daten wie API-Antworten oder berechneter Ergebnisse.

import 'package:nylo_framework/nylo_framework.dart';

// Cache a value for 60 seconds
String? value = await cache().saveRemember("my_key", 60, () {
  return "Hello World";
});

// Retrieve the cached value
String? cached = await cache().get("my_key");

// Remove from cache
await cache().clear("my_key");

Mit Ablaufzeit speichern

Verwenden Sie saveRemember, um einen Wert mit einer Ablaufzeit zu cachen:

String key = "user_profile";
int seconds = 300; // 5 minutes

Map<String, dynamic>? profile = await cache().saveRemember(key, seconds, () async {
  // This callback only runs on cache miss
  printInfo("Fetching from API...");
  return await api<UserApiService>((request) => request.getProfile());
});

Bei nachfolgenden Aufrufen innerhalb des Ablaufzeitraums wird der gecachte Wert zurückgegeben, ohne den Callback auszuführen.

Dauerhaft speichern

Verwenden Sie saveForever, um Daten unbegrenzt zu cachen:

String key = "app_config";

Map<String, dynamic>? config = await cache().saveForever(key, () async {
  return await api<ConfigApiService>((request) => request.getConfig());
});

Die Daten bleiben gecacht, bis sie explizit entfernt werden oder der Cache der App geleert wird.

Daten abrufen

Einen gecachten Wert direkt abrufen:

// Retrieve cached value
String? value = await cache().get<String>("my_key");

// With type casting
Map<String, dynamic>? data = await cache().get<Map<String, dynamic>>("user_data");

// Returns null if not found or expired
if (value == null) {
  print("Cache miss or expired");
}

Wenn das gecachte Element abgelaufen ist, entfernt get() es automatisch und gibt null zurück.

Daten direkt speichern

Verwenden Sie put, um einen Wert direkt ohne Callback zu speichern:

// Store with expiration
await cache().put("session_token", "abc123", seconds: 3600);

// Store forever (no seconds parameter)
await cache().put("device_id", "xyz789");

Daten entfernen

// Remove a single item
await cache().clear("my_key");

// Remove all cached items
await cache().flush();

Cache prüfen

// Check if a key exists
bool exists = await cache().has("my_key");

// Get all cached keys
List<String> keys = await cache().documents();

// Get total cache size in bytes
int sizeInBytes = await cache().size();
print("Cache size: ${sizeInBytes / 1024} KB");

API-Antworten cachen

Verwendung des api()-Helpers

API-Antworten direkt cachen:

Map<String, dynamic>? response = await api<ApiService>(
  (request) => request.get("https://api.github.com/repos/nylo-core/nylo"),
  cacheDuration: const Duration(minutes: 5),
  cacheKey: "github_repo_info",
);

printInfo(response);

Verwendung von NyApiService

Caching in Ihren API-Service-Methoden definieren:

class ApiService extends NyApiService {

  Future<Map<String, dynamic>?> getRepoInfo() async {
    return await network(
      request: (request) => request.get("https://api.github.com/repos/nylo-core/nylo"),
      cacheKey: "github_repo_info",
      cacheDuration: const Duration(hours: 1),
    );
  }

  Future<List<User>?> getUsers() async {
    return await network<List<User>>(
      request: (request) => request.get("/users"),
      cacheKey: "users_list",
      cacheDuration: const Duration(minutes: 10),
    );
  }
}

Dann die Methode aufrufen:

Map<String, dynamic>? repoInfo = await api<ApiService>(
  (request) => request.getRepoInfo()
);

Plattformunterstützung

Der Cache von Nylo Website verwendet dateibasierte Speicherung und bietet folgende Plattformunterstützung:

Plattform Unterstützung
iOS Volle Unterstützung
Android Volle Unterstützung
macOS Volle Unterstützung
Windows Volle Unterstützung
Linux Volle Unterstützung
Web Nicht verfügbar

Auf der Web-Plattform degradiert der Cache elegant - Callbacks werden immer ausgeführt und das Caching wird umgangen.

// Check if cache is available
if (cache().isAvailable) {
  // Use caching
} else {
  // Web platform - cache not available
}

API-Referenz

Methoden

Methode Beschreibung
saveRemember<T>(key, seconds, callback) Wert mit Ablaufzeit cachen. Gibt gecachten Wert oder Callback-Ergebnis zurück.
saveForever<T>(key, callback) Wert unbegrenzt cachen. Gibt gecachten Wert oder Callback-Ergebnis zurück.
get<T>(key) Gecachten Wert abrufen. Gibt null zurück, wenn nicht gefunden oder abgelaufen.
put<T>(key, value, {seconds}) Wert direkt speichern. Optionale Ablaufzeit in Sekunden.
clear(key) Bestimmtes gecachtes Element entfernen.
flush() Alle gecachten Elemente entfernen.
has(key) Prüfen, ob ein Schlüssel im Cache existiert. Gibt bool zurück.
documents() Liste aller Cache-Schlüssel abrufen. Gibt List<String> zurück.
size() Gesamte Cache-Größe in Bytes abrufen. Gibt int zurück.

Eigenschaften

Eigenschaft Typ Beschreibung
isAvailable bool Ob Caching auf der aktuellen Plattform verfügbar ist.