2012-05-23 5 views
0

Est-ce que quelqu'un a essayé d'invalider un espace de noms memcached en fonction de l'horodatage? Par exemple. J'ai besoin d'un espace de noms memcached qui est l'horodatage du serveur Tomcat qui héberge mes services d'API. J'ai besoin d'annoter mes appels de méthode pour que l'espace de noms soit une variable (plutôt qu'une constante) et qu'il contienne un horodatage du démarrage du serveur. Ensuite, à chaque démarrage du serveur, l'espace de noms de cette méthode doit être défini dynamiquement sur l'heure de démarrage du serveur.Invalider un espace de noms à l'aide d'un simple memcached de ressort

Mise à jour - Je sais qu'il existe un moyen détourné de le faire en utilisant javaassist et les annotations dynamiques, mais je voulais une meilleure approche.

-Gotz

Répondre

1

L'espace de noms est toujours une constante, vous ne pouvez pas utiliser la variable. Si je comprends bien, vous voulez créer une clé de cache en utilisant le temps de démarrage du serveur. Il y a au moins deux façons de le faire. d'abord: utiliser @ReadThroughSingleCache

@ReadThroughSingleCache(namespace = "api_divisions_allDivisions") 
public List<Division> getAllDivisions(@ParameterValueKeyProvider long startup) 
{ 
    List<Division> all = (List<Division>)getHibernateTemplate().find("from Division"); 
    return all; 
} 

Deuxièmement: utiliser CacheKeyBuilder personnalisée qui peut ajouter l'horodatage à chaque touche de cache.

Avez-vous besoin d'anciennes valeurs stockées avant le démarrage du serveur? Sinon, la solution simple est de toujours utiliser la même clé de cache et de nettoyer memcached au démarrage du serveur.

+0

Merci pour la réponse. Eh bien, je n'ai pas besoin des anciennes valeurs au démarrage du serveur. Avoir un horodatage était une approche simple pour rafraîchir le cache au démarrage du serveur et laisser le LRU s'occuper du reste. Mais existe-t-il un moyen par lequel je peux invalider le cache au moment du démarrage du serveur en utilisant l'API SSM? – gotz

+0

Créer un haricot de printemps personnalisé avec dépendance à [Cache] (https://simple-spring-memcached.googlecode.com/svn/docs/2.0.0/apidocs/com/google/code/ssm/Cache.html) et en tant que init-method de cette méthode d'ensemble de beans qui appelle [Cache.flush] (https://simple-spring-memcached.googlecode.com/svn/docs/2.0.0/apidocs/com/google/code/ssm/Cache. html # flush()). Ca devrait marcher comme tu veux. Gardez à l'esprit que dans un environnement multi-serveur, le redémarrage d'un serveur annulera le cache de tous les serveurs (je suppose que tous les serveurs utilisent les mêmes instances memcached). – ragnor

+0

Oui, tous les serveurs utilisent les mêmes instances de cache. Je vais essayer. Merci. – gotz

Questions connexes