Einfache Java-Caching-Bibliothek oder Entwurfsmuster?

8

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.

    
nn4l 31.10.2012, 13:05
quelle

4 Antworten

12

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.

    
Brian Agnew 31.10.2012, 13:06
quelle
3

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. Ссылка

    
tjg184 31.10.2012 13:06
quelle
2

Ich würde vorschlagen, dass Sie das Proxy Design Pattern verwenden Auf diese Weise können Sie die Caching-Logik-Implementierung in Ihre Proxy-Klasse kapseln

gibt hier ein cooles Beispiel, das Ihren Bedürfnissen entspricht

Ссылка

    
fredcrs 31.10.2012 13:08
quelle
2

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

    
Ramesha.C 28.02.2017 11:16
quelle