Ich muss häufig auf das Ergebnis einer zeitaufwendigen Berechnung zugreifen. Das Ergebnis ändert sich selten, daher muss ich die Daten von Zeit zu Zeit neu berechnen, aber es ist in Ordnung, das veraltete Ergebnis eine Weile zu verwenden. Was wäre der einfachste Weg, dies zu tun, und gibt es eine Bibliotheksmethode oder ein Designmuster?
Ich denke an etwas wie
%Vor%Eine korrekte Implementierung ist vielleicht nicht trivial, sie muss sich vielleicht mit Thread-Sicherheit, Race Conditions usw. befassen, also würde ich lieber eine bewährte Implementierung verwenden, als meine eigene hier zu rollen.
Herzlichen Glückwunsch, dass Ihr eigenes Schreiben mehr Ärger bringt, als es anfänglich erscheint!
Ich würde die Guava-Cache -Lösung ausprobieren. Guava ist eine bewährte Bibliothek und die Caches sind leicht verfügbar (und konfigurierbar) über eine fließende Factory-API.
Alle Guava-Caches, die geladen werden oder nicht, unterstützen die Methode get (K, Aufrufbar & lt; V & gt;). Diese Methode gibt den Wert zurück, der dem Schlüssel zugeordnet ist den Cache oder berechnet ihn aus dem angegebenen Callable und fügt ihn hinzu der Cache. Kein beobachtbarer Zustand, der diesem Cache zugeordnet ist, wird geändert bis das Laden abgeschlossen ist. Diese Methode bietet einen einfachen Ersatz für das konventionelle "if cached, return; andernfalls create, cache and return "Muster.
Ich würde mir Google Guava-Bibliotheken ansehen. Ein Großteil dieser Arbeit wurde bereits für Sie erledigt.
Es gibt speziell einen Abschnitt namens "Timed Eviction", der mit dem, was Sie wollen, in Verbindung steht. Ссылка
Wenn Sie keine Bibliothek von Drittanbietern verwenden möchten, können Sie einfach eine statische Karte erstellen, die den Schlüssel und den Wert enthält. Mit der Taste können Sie die Daten schnell abrufen.
und Methoden schreiben, um Werte zu cachen, holen, entfernen hinzuzufügen.
%Vor%hoffe das hilft
Tags und Links java design-patterns caching memcached ehcache