Je veux utiliser l'abstraction du cache de Spring pour annoter les méthodes comme @Cacheable. Cependant, certaines méthodes sont conçues pour prendre un tableau ou une collection de paramètres et retourner une collection. Par exemple, considérons cette méthode pour trouver ENTITES:Quelles stratégies existent pour utiliser Spring Cache sur des méthodes qui prennent un paramètre de type tableau ou collection?
public Collection<Entity> getEntities(Collection<Long> ids)
sémantiquement, je dois cache Entity
objets individuellement (par id calées), ne repose pas sur la collecte d'ID dans son ensemble. Semblable à ce que demande this question.
Simple Spring Memcached soutient ce que je veux, par l'intermédiaire de son ReadThroughMultiCache
, mais je veux utiliser l'abstraction de printemps afin de soutenir un changement facile de la mise en œuvre du magasin de cache (goyave, cohérence, Hazelcast, etc.), non seulement Memcached.
Quelles stratégies existent pour mettre en cache ce type de méthode en utilisant Spring Cache?
Je devrais également souligner que si vous savez à l'avance que vous ne prévoyez pas de passer de fournisseurs de mise en cache, alors vous pouvez simplement implémenter l'opération 'Cache' en termes de fournisseur. Par exemple, si Memcached gère cela en utilisant ReadThroughMultiCache, alors vous pourriez simplement implémenter l'opération Cache.get (key) (et éventuellement, mettre?) Interms de ReadThroughMultiCache. Ma solution, cependant, a essayé d'être (pour la plupart) agnostique de fournisseur de cachette par votre description. –
John, j'apprécie l'effort et l'idée, mais la limitation # 1 est un deal-breaker pour moi. Nous devons mettre en cache de manière intelligente afin que les éléments de la liste de clés ne soient PAS "tout ou rien". Nous devons utiliser les éléments mis en cache de la liste chaque fois qu'ils sont présents. –
Bon, malheureusement, de prime abord, je ne peux pas imaginer une meilleure façon de rendre cela plus intelligent que de vous lier (dans une certaine mesure) sur votre fournisseur de cache sous-jacent. Quoi qu'il en soit, le framework est flexible dans la mesure où il vous donne une option pour l'extension, pour personnaliser le comportement. Cependant, out-of-the-box, ce serait très difficile à soutenir, en particulier de manière cohérente à travers les fournisseurs de mise en cache. Ouvert aux suggestions ou autres idées sur de telles questions. –