Was ist `cached` und warum wird es benötigt?
Die Bibliothek cached ist ein leistungsstarkes und flexibles Werkzeug zum Caching von Funktionsergebnissen in Rust. Sie ermöglicht es, die Ausführung von Programmen erheblich zu beschleunigen, indem wiederholte Berechnungen teurer Operationen (z. B. Datenbankabfragen, Berechnungen mit großen Datenmengen, Aufrufe externer APIs) vermieden werden. Caching ist besonders nützlich in Webservern, Spiele-Engines, Analysesystemen und allen Anwendungen, bei denen dieselben Daten mehrfach abgefragt werden.
Installation
Fügen Sie die Abhängigkeit zu Ihrer Cargo.toml hinzu:
[dependencies]cached = "0.48"Führen Sie anschließend cargo build aus – die Bibliothek ist bereit zur Verwendung.
Hauptfunktionen
- Funktions-Caching – automatisches Speichern der Ergebnisse eines Funktionsaufrufs basierend auf seinen Argumenten.
- TTL (Time To Live) – Festlegung der Lebensdauer des Caches, nach der die Daten automatisch gelöscht werden.
- Maximale Cache-Größe – Begrenzung der Anzahl gespeicherter Einträge (LRU-Heuristik).
- Asynchrone Unterstützung – Arbeit mit async-Funktionen über
cached::async. - Speicher – integrierte Unterstützung für Redis, Memcached, Datei-Cache und In-Memory-Speicher.
Rust-Codebeispiel
use cached::proc_macro::cached;use std::time::Duration;
// Wir cachen die Funktion mit einer TTL von 60 Sekunden und maximal 10 Einträgen#[cached( time = 60, size = 10, key = "u32", convert = r#"{ _input }"#)]fn expensive_computation(input: u32) -> String { println!("Berechne für {}", input); std::thread::sleep(Duration::from_secs(2)); format!("Ergebnis für {}", input)}
fn main() { // Erster Aufruf – Berechnung (2 Sekunden) println!("{}", expensive_computation(42)); // Zweiter Aufruf – sofortige Rückgabe aus dem Cache println!("{}", expensive_computation(42));}Beim ersten Aufruf von expensive_computation(42) wird die Funktion ausgeführt (Verzögerung von 2 Sekunden), beim zweiten Aufruf wird das Ergebnis sofort aus dem Cache geholt.
Wann verwenden
Die Bibliothek cached ist ideal für:
- Beschleunigung häufig aufgerufener Funktionen mit unveränderten Argumenten.
- Reduzierung der Last auf Datenbanken oder externe Dienste.
- Implementierung von Memoization in rekursiven Algorithmen (z. B. Fibonacci-Zahlen).
- Erstellung von Caching-Proxy-Schichten in APIs.
Vermeiden Sie Caching, wenn sich Daten häufig ändern oder das Ergebnis vom externen Zustand (Zeit, Zufall) abhängt.
Fazit
cached ist eine minimalistische, aber leistungsstarke Bibliothek, die 90 % der Caching-Aufgaben in Rust löst. Dank der Makros ist kein Boilerplate-Code erforderlich und sie lässt sich leicht in jedes Projekt integrieren. Installieren Sie sie noch heute und spüren Sie den Leistungsschub!