我们使用 Grails 和 Groovy 构建了一个大型保险单和索赔管理系统。性能问题正在减慢站点速度,因为所有“READS”都从数据库中获取,这不是必需的,因为大多数数据都是静态的。我们想在 Grails 层中引入一个简单的键/值缓存,但我们不想用 cache.get() 和 cache.set() 代码乱扔现有代码,我们想改用方面。
这是我们主控制器的示例....
InsuranceMainController {
def customer {
//handles all URI mappings for /customer/customerId
}
def policy {
//handles all URI mappings for /policy/policyId,
}
def claim {
//handles all URL mappings for /claim/claimId
}
就缓存而言,暂时假设它是一个名为“缓存”的简单 Map,可用作全局范围的对象,并且缓存中的对象由请求 URI 键控...
cache.put("/customer/99876", customerObject)
cache.put("/policy/99-33-ARYT", policyObject)
回到控制器,如果我们只是用 cache.get()/set() 乱扔代码,这是我们想要避免使用 Spring AOP 的,我们最终会得到混乱的代码。我们希望通过 apsect 实现以下功能,或者仅通过更简单、更清晰的实现......
InsuranceMainController {
def customer {
Object customer = cache.get(request.getRequestURI())
if ( customer != null)
//render response with customer object
}else
//get the customer from the database, then add to cache
CustomerPersistenceManager customerPM = ...
customer = customerPM.getCustomer(customerId)
cache.put(request.getRequestURI(), customer)
}
}
我们需要一些例子来展示我们如何使用 Spring AOP 或 Grails 中更简单的东西来实现上述功能,同时避免使用 cache.get()/set() 乱写代码。如果需要使 AOP 正常工作,欢迎提出重构现有控制器的建议。
提前致谢