Afin de minimiser le nombre de requêtes de base de données, j'ai besoin d'une sorte de cache pour stocker des paires de données. Mon approche est maintenant une hashtable (avec les chaînes comme clés, les entiers comme valeur). Mais je veux être capable de détecter les mises à jour dans la base de données et remplacer les valeurs dans mon "cache". Ce que je cherche est quelque chose qui rend mes paires stockées invalides après une période de temps prédéfinie, peut-être 10-15 minutes. Comment pourrais-je l'implémenter? Y at-il quelque chose dans le paquet Java standard que je peux utiliser?Mise à jour des données mises en cache dans une table de hachage
Répondre
Vous pouvez utiliser des solutions existantes (voir réponse précédente)
Ou si vous voulez un défi, faire votre propre classe de cache facile (non recommandé pour le projet de production, mais c'est une excellente expérience d'apprentissage.
Vous aurez besoin d'au moins 3 membres
- A
données de cache stockées sous forme de table de hachage, objet
date d'expiration de la mémoire cache Suivant
intervalle d'expiration de la mémoire cache réglés via constructeur.
ont ensuite simplement des données publiques des méthodes de lecture, qui vérifient l'état d'expiration du cache:
sinon expiré, accesseurs de l'appel hastable; Si elle est expirée, appelez d'abord la méthode "chargement de données" qui est également appelée dans le constructeur pour pré-remplir puis appeler des accesseurs hashtables.
Pour une classe de cache encore plus cool (je l'ai mis en œuvre en Perl à mon travail), vous pouvez avoir des fonctionnalités supplémentaires que vous pouvez mettre en œuvre:
individuelle par clé expiration du cache (couplé avec rechargement de données automatique, semi-automatique et mono-coup (par exemple, rechargement complet du cache à la fois, rechargement d'un lot de données défini par une requête prédéfinie ou rechargement de chaque élément de données piecemail) . Cette dernière approche est très utile lorsque votre cache a de nombreux hits sur les mêmes clés exactes - de cette façon, vous n'avez pas besoin de recharger l'univers chaque fois que 3 kets auxquels vous avez toujours accès expirent.
J'utiliserais une solution existante (il y a beaucoup de frameworks de cache). ehcache est grand, il peut réinitialiser les valeurs sur timespan donné et je parie qu'il peut faire beaucoup plus (je l'ai utilisé seulement)
Vous pouvez utiliser un cadre de mise en cache comme OSCache, EHCache, JBoss Cache, JCS ... Si vous cherchez quelque chose qui suit un "standard", choisissez un cadre qui prend en charge l'interface standard JCache (javax. cache) aka JSR-107.Pour des besoins simples comme ce que vous décrivez, je regarderais EHCache ou OSCache (je ne dis pas qu'ils sont basiques, mais ils sont simples pour commencer), ils supportent tous deux l'expiration en fonction du temps.
Si je devais choisir une solution, je recommanderais Ehcache qui a ma préférence, surtout maintenant qu'il a rejoint Terracotta. Et juste pour l'enregistrement, Ehcache fournit a preview implementation de JSR107 via le net.sf.cache.jcache package
.
La spécification JSR-107 était une excellente lecture. Cela concerne vraiment la question. – matpe
- 1. Mises à jour de données manquantes
- 2. mise en cache des données WebView (Android)
- 3. Mise à jour des données Linq
- 4. WCF: partage des données mises en cache sur plusieurs services
- 5. Effectuer des mises à jour modifiables dans une requête LINQ?
- 6. mise à jour SQL une table d'une autre table
- 7. SSMS autorise les enregistrements en double dans une table, mais pas les mises à jour suivantes
- 8. Comment puis-je reporter des mises à jour de base de données dans Rails?
- 9. Mémoires de mise en cache de données dans ASP.NET MVC
- 10. iphone: mise en cache et mise à jour des champs xml
- 11. Gestion des mises à jour logicielles
- 12. Mise à jour d'une table à partir d'une table temporaire
- 13. .NET: mise en cache dans une base de données ou un système de fichiers avec CacheDependency
- 14. Mise à jour de plusieurs colonnes dans une TABLE à partir d'une autre table (Oracle)
- 15. Impossible de mettre à jour les modèles avec la mise en cache des pages
- 16. Mise à jour d'une table dans une instruction select
- 17. Mises à jour de base de données SpeedUp
- 18. mise à jour d'une table en joignant plusieurs tables
- 19. mise en cache des fichiers JavaScript
- 20. Mise à jour de plusieurs lignes à partir d'un hachage sans simplement boucler dans Rails
- 21. Mise à jour en masse dans MYSQL
- 22. JTree mises à jour en temps réel?
- 23. simple façon de connaître les mises à jour dans la table
- 24. Enregistrement des mises à jour d'objets dans les rails
- 25. PHP Application Mises à jour
- 26. Configurer nginx pour servir des images mises en cache
- 27. Mises à jour de Zend Framework?
- 28. Les mises à jour en COM automatique?
- 29. table SQL problème de mise à jour
- 30. Comment forcer la séquence des mises à jour dans DB
Pour l'instant ce sera une expérience d'apprentissage, mais je pense à Ehcahce et aux autres quand j'en ai besoin pour un vrai projet. Cette fois-ci, la spécification n'appelle pas cette fonctionnalité particulière - c'est seulement quelque chose que je veux essayer et faire de toute façon (mais jamais publier au public). – matpe