控制器操作缓存在使用Grails缓存插件时似乎不起作用
Grails版本:3.0.9 Groovy版本:2.4.5 JVM版本:1.8.0_60 我正在使用Grails缓存插件 我也有一些成功的缓存服务方法,例如:控制器操作缓存在使用Grails缓存插件时似乎不起作用,grails,grails-plugin,Grails,Grails Plugin,Grails版本:3.0.9 Groovy版本:2.4.5 JVM版本:1.8.0_60 我正在使用Grails缓存插件 我也有一些成功的缓存服务方法,例如: @Transactional class EventCategoryService { @Cacheable('eventCategory') def findAllSports() { def sportCategories log.info('called EventCategory
@Transactional
class EventCategoryService {
@Cacheable('eventCategory')
def findAllSports() {
def sportCategories
log.info('called EventCategoryService.findAllSports')
sportCategories = EventCategory.findAllByParentCategoryName("Sport", [sort: "order"])
}
}
一旦创建了缓存,我就不再像预期的那样在后续调用的日志中显示“called EventCategoryService.findAllSports”
但是,该插件在一个名为“控制器操作缓存”的部分中指出,“您还可以使用相同的注释缓存web请求的响应”
@Cacheable('eventCategory')
def index(IndexCommand command) {
command.init()
log.info('called frontend:index')
render (view: "index", model: [command: command, distances: distances])
}
不幸的是,我看到的每个调用“calledfrontend:index”都会出现在日志中,一些基本的时间安排证实了在调用过程中没有速度的提高
我错过了一个把戏吗?我无法找到解决方案,因此非常感谢您的帮助
我将包括command对象,这是否与缓存有任何关系
class IndexCommand {
def searchService
def eventCategoryService
int max
int offset
String search
java.util.Date queryStartDate = new Date()
java.util.Date queryEndDate = new Date().plus(365)
def sportCategories
def results
def benchmark = { closure ->
def start = System.currentTimeMillis()
closure.call()
def now = System.currentTimeMillis()
now - start
}
def init() {
if (!max) max = 6
if (!offset) offset = 0
def duration = benchmark {
results = searchService.advancedSearchWithPagedResults(
max,
offset,
search,
queryStartDate,
queryEndDate)
}
log.info("searchService.advancedSearchWithPagedResults took ${duration} ms" )
duration = benchmark {
sportCategories = eventCategoryService.findAllSports()
}
log.info("EventCategory.findAllByParentCategoryName took ${duration} ms" )
}
}
您正在操作中传递IndexCommand命令,因此每次调用该操作时,您都在传递不同的IndexCommand对象。值被缓存,但必须传递相同的对象才能从缓存中获取值 因此,您可以传递对象的必填字段,而不是传递整个对象,并在操作中创建对象 希望这有帮助
谢谢这很有道理,谢谢你的帮助。我试试看。我想你已经被自动分配了赏金。抱歉,我在接受你的回答时就这么做了。再次感谢。