您已设置'缓存为真'对于域类,这意味着启用缓存
static mapping = {
cache true
}
现在,如果我说DomianClass.get(1)
- 它没有击中数据库,但是当我使用DomianClass.getAll()
时,它会命中数据库。
Isn&#t; t DomianClass.getAll()
是否从缓存中获取?为什么它每次都会打到数据库?
是否有任何选项可以从二级缓存中获取所有记录?
答案 0 :(得分:3)
休眠二级缓存不可能确定" all"是否存在于缓存中。让我们通过一些例子来了解原因。
DomainClass.get(1)询问缓存是否存在1。如果是这样,返回它,如果没有命中数据库,请将其缓存并返回。缓存中对1的进一步请求将从缓存中返回。
DomainClass.getAll()询问缓存是否"全部"存在。缓存然后必须思考"所有意味着什么?"并且唯一合乎逻辑的回答是"我不知道,但数据库确实如此。"
现在,在#2的情况下,您/可能/可能会想到如果您要求"所有"然后缓存可以缓存该响应。但是,这与缓存的第二级缓存不同。
简单地说,第二级缓存是针对实例的,由域类和身份索引。