par mes services
C'est généralement atteint dans les services de votre application (par exemple les composants de l'application @Service) en utilisant les annotations @Cacheable
, @CachePut
de Spring, par exemple ...
@Service
class BookService {
@Cacheable("Books")
Book findBook(ISBN isbn) {
...
return booksRepository().find(isbn);
}
@CachePut(cacheNames = "Books", key = "#book.isbn")
Book update(Book book) {
...
return booksRepository.save(book);
}
}
Les deux @Cacheable
et @CachePut
mettra à jour le fournisseur de cache comme la méthode sous-jacente peut callback par la base de données sous-jacente.
et quand j'ai ajouté des données directement dans la base de données
Ceci est généralement réalisé par le magasin de cache sous-jacent. Par exemple, dans GemFire , vous pouvez utiliser un CacheLoader pour "read-through" (dans votre base de données sous-jacente peut-être) sur "cache misses". Voir la documentation du guide d'utilisation de GemFire sur "Comment Data Loaders Work" à titre d'exemple et plus de détails. Donc, pour revenir à notre exemple, si la base de données "Book (Store)" était mise à jour indépendamment de l'application (en utilisant le support et l'infrastructure Caching Annotation de Spring), un développeur doit simplement définir une stratégie sur les échecs de cache. Et, en GemFire qui pourrait être un CacheLoader
, et quand ...
bookService.find(<some isbn>);
est appelé résultat un « cache miss », le CacheLoader de GemFire donnera le coup, chargez le cache avec ce livre et le printemps verra comme un "hit de cache".
Bien sûr, notre implémentation de bookService.find (..) est allée à la base de données sous-jacente, mais elle ne récupère qu'un livre "unique". Un chargeur peut être implémenté pour peupler un ensemble complet de livres en fonction de certains critères (tels que la popularité), dans lesquels le service d'application s'attend à ce que cet ensemble particulier de livres soit recherché par des clients potentiels, en utilisant l'application. et les pré-cache. Ainsi, alors que les annotations du cache de Spring fonctionnent généralement par entrée, une stratégie spécifique de cache peut être utilisée pour pré-extraire et, en quelque sorte, «rafraîchir» le cache, paresseusement, sur le premier cache manquant. En résumé, alors que le premier peut être géré par Spring, le "refresh" par exemple est typiquement géré par le fournisseur de mise en cache (par exemple GemFire).
Espérons que cela vous donne quelques idées.
Cheers, John