Partie I
Dans un Graal app, je comprends que vous activez le 2ème niveau de cache par domaine en classe par l'ajout d'
static mapping {
cache true
}
Par défaut, le 2ème niveau de cache est utilisé uniquement lors de la get()
est appelé, mais il peut également être utilisé pour les critères de requêtes et de la dynamique des télémètres par l'ajout d' cache true
à la requête.
Cependant, je ne suis toujours pas sûr de comprendre comment le cache de requête fonctionne. Ma meilleure supposition est que:
- il y a de requête distincte de cache pour chaque domaine de la classe, par exemple, un Livre et un autre de l'Auteur
- avant, comme une requête
Author.findByName('bob', [cache: true])
est exécutée, une clé de cache est calculée, qui est basé sur le domaine de la classe (Auteur), la requête (findByName) et les paramètres de la requête ("bob"). Si la clé se trouve dans l'Auteur du cache de requêtes, les résultats mis en cache sont retournés à la place de l'exécution de la requête - tout fois qu'un Auteur est enregistré, supprimés ou mis à jour, l'Auteur de la requête cache est vidé
Cela semble raisonnable jusqu'à ce que nous considérons qu'une requête qui retourne Livre instances peuvent se joindre à l'Auteur de la table. Dans ce cas, il serait nécessaire de rincer la fois le Livre et l'Auteur de la requête caches quand un Auteur est enregistré, supprimés ou mis à jour. Cela m'amène à penser que peut-être il est juste un simple cache de requête et qu'il est effacé à chaque fois que de domaine mis en cache classe est sauvé?
Partie II
Dans le Graal docs il mentionne que
Ainsi que la capacité à utiliser Hibernate du cache de second niveau de cache cas, vous pouvez également mettre en cache les collections (associations) des objets.
Par exemple:
class Author {
static hasMany = [books: Book]
static mapping = {
cache true // Author uses the 2nd level cache
books cache: true // associated books use the 2nd level cache
}
}
class Book {
static belongsTo = [author: Author]
static mapping = {
cache true // Book uses the 2nd level cache
}
}
La configuration ci-dessus, le sens, c'est à dire si l'Auteur et l'Ouvrage sont eux-mêmes à l'aide de la 2e niveau de cache, est-il un avantage à faire de l'Auteur du Livre de l'association également utiliser le 2ème niveau de cache?
La partie III
Enfin, j'ai lu ce conseil sur l'utilisation de la 2ème niveau du cache de requêtes, ce qui suggère qu'il devrait être utilisé seulement pour rarement évolution des classes du domaine. Existe-il des circonstances dans lesquelles on ne devrait pas permettre à la 2ème niveau de cache pour get()
des opérations, c'est à dire aucune raison pourquoi il ne faudrait pas ajouter ce qui suit dans un domaine classe
static mapping = {
cache true // Book uses the 2nd level cache
}