2015-09-07 1 views
1

Comment je peux rafraîchir le cache de printemps quand j'ai inséré des données dans la base de données à travers mes services et quand j'ai ajouté des données directement dans la base de données.Peut-on y parvenir ?.Refresh Cache au printemps

Note:

J'utilise libs suivants 1) net.sf.json-lib 2) ressort support contexte

Répondre

0

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