Ehcache 缓存Key 问题
项目中用Ehcache 对Service层进行缓存,其中的find 方法的参数都是 VO 对象,都是在Action 中new 出来的,Ehcache缓存的key 是类名+方法的名+参数名, 所以每次key 都不一样,请各位给个解决方案。
项目中用Ehcache 对Service层进行缓存,其中的find 方法的参数都是 VO 对象,都是在Action 中new 出来的,Ehcache缓存的key 是类名+方法的名+参数名, 所以每次key 都不一样,请各位给个解决方案。
>key 是类名+方法的名+参数名
缓存的是对象实例,不是类,要将类和对象区别搞清楚。
但是,key也不能保存对象的hashcode,这是标识对象,不是标识领域模型,领域模型虽然以对象形式存在,但不等同于对象,所以,key应该是领域模型对象的标识.这个标识在ddd中有描述。
说白点,这个标识就是领域模型对象持久化保存到数据库中的唯一主键(如果是一个实体映射到一个表的话)。
>> 所以每次key 都不一样
这么说,你的缓存永远都不会被命中?
缓存的是对象实例,不是类,要将类和对象区别搞清楚。
这个清楚,缓存的就是该方法返回的结果集,用到的key 就是类名+方法的名+参数名.
倒是可以用包名+类型+方法名+参数.hashCode();来作为键.
下次执行同样的方法,可以实现读取缓存的效果.
但是这样有个问题,关联的数据跟新,怎么通知到这个key呢?