第二级缓存如何与getAll&进入gorm?

时间:2014-04-03 03:32:42

标签: hibernate caching grails gorm

您已设置'缓存为真'对于域类,这意味着启用缓存

static mapping = {
    cache true
}

现在,如果我说DomianClass.get(1) - 它没有击中数据库,但是当我使用DomianClass.getAll()时,它会命中数据库。

Isn&#t; t DomianClass.getAll()是否从缓存中获取?为什么它每次都会打到数据库? 是否有任何选项可以从二级缓存中获取所有记录?

1 个答案:

答案 0 :(得分:3)

休眠二级缓存不可能确定" all"是否存在于缓存中。让我们通过一些例子来了解原因。

案例#1

DomainClass.get(1)询问缓存是否存在1。如果是这样,返回它,如果没有命中数据库,请将其缓存并返回。缓存中对1的进一步请求将从缓存中返回。

案例#2

DomainClass.getAll()询问缓存是否"全部"存在。缓存然后必须思考"所有意味着什么?"并且唯一合乎逻辑的回答是"我不知道,但数据库确实如此。"

现在,在#2的情况下,您/可能/可能会想到如果您要求"所有"然后缓存可以缓存该响应。但是,这与缓存的第二级缓存不同。

简单地说,第二级缓存是针对实例的,由域类和身份索引。