Grails EH Cache 对象作为参数问题
Grails EH Cache object as parameter issues
我想在我的 grails 应用程序中使用 EHCache。我想用@Cacheable缓存一个方法。
我正在测试这个场景:
简单测试 class:
class MyTestClassB {
def a
def b
@Override
boolean equals(Object obj) {
println ("New A" + this.a)
println ("Olda A" + obj.a)
if (this.a != obj.a) {
return false
}
return super.equals(obj)
}
}
要在服务中缓存的方法class:
@Transactional
class HelpService {
@Cacheable('newcache')
def inlineCacheService(def param) {
println ("I am in the function")
MyTestClass a = new MyTestClass()
a.paramA = new Date()
a.paramB = [
id: "1",
data: "f"
]
return a
}
}
所以我调用控制器中的方法:
MyTestClassB c1 = new MyTestClassB()
c1.a = "paramc1"
render "1: " + helpService.inlineCacheService(c1).paramA
c1.a = "paramc1neu"
render "<br/>1: " + helpService.inlineCacheService(c1).paramA
这个场景的问题是:我改变了参数对象的值,所以我预计我没有得到缓存的值。但是 inlineCacheService 的第二次调用从缓存中读取值。这里有什么问题?我是不是误会了什么?
哈希码丢失。实施后,缓存现在可以正常工作。感谢@rcgeorge23
我想在我的 grails 应用程序中使用 EHCache。我想用@Cacheable缓存一个方法。
我正在测试这个场景: 简单测试 class:
class MyTestClassB {
def a
def b
@Override
boolean equals(Object obj) {
println ("New A" + this.a)
println ("Olda A" + obj.a)
if (this.a != obj.a) {
return false
}
return super.equals(obj)
}
}
要在服务中缓存的方法class:
@Transactional
class HelpService {
@Cacheable('newcache')
def inlineCacheService(def param) {
println ("I am in the function")
MyTestClass a = new MyTestClass()
a.paramA = new Date()
a.paramB = [
id: "1",
data: "f"
]
return a
}
}
所以我调用控制器中的方法:
MyTestClassB c1 = new MyTestClassB()
c1.a = "paramc1"
render "1: " + helpService.inlineCacheService(c1).paramA
c1.a = "paramc1neu"
render "<br/>1: " + helpService.inlineCacheService(c1).paramA
这个场景的问题是:我改变了参数对象的值,所以我预计我没有得到缓存的值。但是 inlineCacheService 的第二次调用从缓存中读取值。这里有什么问题?我是不是误会了什么?
哈希码丢失。实施后,缓存现在可以正常工作。感谢@rcgeorge23