2009-09-19 6 views
1

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

0

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

  1. A

    données de cache stockées sous forme de table de hachage, objet

  2. date d'expiration de la mémoire cache Suivant

  3. 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.

+0

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

4

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)

0

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.

+0

La spécification JSR-107 était une excellente lecture. Cela concerne vraiment la question. – matpe

Questions connexes