À la recherche de simples Java en mémoire cache
Je suis à la recherche d'un simple Java cache en mémoire qui a bien de la concurrence (donc LinkedHashMap n'est pas assez bon), et qui peut être sérialisé sur le disque régulièrement.
Une fonction dont j'ai besoin, mais qui a été difficile à trouver, est une manière de "coup d'oeil" à un objet. Par cela, je veux dire récupérer un objet de la cache sans causer le cache pour tenir à l'objet plus longtemps qu'elle aurait du.
Mise à jour: Une exigence supplémentaire, j'ai oublié de mentionner, c'est que j'ai besoin d'être en mesure de modifier les objets mis en cache (ils contiennent float tableaux) en place.
Quelqu'un peut-il fournir toutes les recommandations?
- Je suis à la recherche de quelque chose de semblable qui est "à l'intérieur de processus" et un poids plus léger. Je veux l'utiliser pour stocker des données dans un plugin Eclipse dans le tas. Ehcache et JCS semblent trop lourds/distribué/J2EE pour mon goût.
- double possible de Léger Objet Java API de cache
- Je vous recommande l'Apache s'Enflammer(ignite.apache.org)
- Que cette question est fermé (6 ans) et il a encore quelque chose que les gens se demandent aujourd'hui, de montrer comment DONC modérateur du système est défaillant.
Vous devez vous connecter pour publier un commentaire.
Depuis que cette question a été initialement demandé, Google Goyave bibliothèque comprend maintenant un outil puissant et flexible de cache. Je recommande l'utilisation de ce.
Ehcache est une assez bonne solution pour cela et a une façon de peek (getQuiet() est la méthode), ce qui n'est pas de mise à jour de l'inactivité de l'horodatage. En interne, Ehcache est mis en œuvre avec un jeu de cartes, un peu comme ConcurrentHashMap, de sorte qu'il a le même genre de simultanéité avantages.
Si tu as besoin de quelque chose de simple, serait-il adapter le projet de loi?
Il l'habitude de les enregistrer sur le disque, mais vous avez dit que vous vouliez simple...
Liens:
(Comme Adam a commenté, de synchroniser une carte a un gain de performance. Ne pas dire l'idée n'a pas de poils, mais il suffit d'un rapide et sale de la solution.)
ConcurrentHashMap<WeakReference<T>>
. docs.oracle.com/javase/7/docs/api/java/lang/ref/...Une autre option pour une mémoire cache de java est cache2k.
Les performances de la mémoire est supérieure à EHCache et google goyave, voir la cache2k page des benchmarks.
Le modèle d'utilisation est similaire à d'autres caches. Voici un exemple:
Si vous avez google goyave, puisque la dépendance puis essayer de goyave cache, peut être une bonne alternative.
Vous pouvez facilement utiliser imcache. Un exemple de code est ci-dessous.
Essayez ceci:
public static SimpleCacheManager getInstance() {
devrait êtrepublic synchronized static SimpleCacheManager getInstance() {
sinonif (instance == null) {
n'est pas thread-safe. Dans ce cas, vous pouvez supprimer le moniteur de l'objet, tous ensemble, parce que la synchronisation a lieu pour toutes getInstance() les appels, voir: javaworld.com/article/2073352/core-java/...Essayer
@Cacheable
de jcabi-aspects. Avec une seule annotation de vous faire la totalité de la méthode à mettre en cache en mémoire:Aussi, lire cet article: http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html
Comment à ce sujet: https://commons.apache.org/proper/commons-jcs/ (mis à jour à la nouvelle adresse, comme JCS est maintenant dans Apache Commons)
Essayer Ehcache? Il vous permet de brancher votre propre mise en cache d'expiration des algorithmes de contrôler votre coup d'oeil de la fonctionnalité.
Vous pouvez sérialiser sur le disque, base de données, à travers un cluster etc...