@使用Spring 3.1可缓存
我将@Cacheable与Spring 3.1一起使用。我对Cacheable中的值和键映射参数有点混淆。 以下是我正在做的:@使用Spring 3.1可缓存,spring,jakarta-ee,caching,ehcache,Spring,Jakarta Ee,Caching,Ehcache,我将@Cacheable与Spring 3.1一起使用。我对Cacheable中的值和键映射参数有点混淆。 以下是我正在做的: @Cacheable(value = "message", key = "#zoneMastNo") public List<Option> getAreaNameOptionList(String local, Long zoneMastNo) { //..code to fetch data form database.. return list; }
@Cacheable(value = "message", key = "#zoneMastNo")
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo) {
//..code to fetch data form database..
return list;
}
@Cacheable(value = "message", key = "#areaMastNo")
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo) {
//..code to fetch data form database..
return list;
}
@Cacheable(value=“message”,key=“#zoneMastNo”)
公共列表getAreaNameOptionList(字符串本地,长区域序号){
//..从数据库获取数据的代码。。
退货清单;
}
@可缓存(value=“message”,key=“#areaMastNo”)
公共列表getLocalityNameOptionList(字符串本地,长区域编号){
//..从数据库获取数据的代码。。
退货清单;
}
这里发生的事情,第二种方法取决于第一种方法的选定值,
但问题是假设当我通过zoneMastNo=1和areaMastNo=1时,第二个方法返回第一个方法的结果。
事实上,我有很多服务,因此,我希望使用公共值来缓存特定的用例。
现在我的问题是:
- 我如何解决这个问题
- 对每个服务都使用cacheable是一个好主意吗
- 在指定的时间之后,缓存将完全从内存中删除,而不需要 使用@cacheexecute
- 我如何解决这个问题
zoneMastNo
和areaMastNo
是完全不同的键,我的意思是zoneMastNo
=1
的List
与areaMastNo
=1
的List不同。这意味着您需要两个缓存,一个按区域设置关键帧,另一个按区域设置关键帧。但是,您只显式使用一个名为message
的缓存。引述:
在上面的代码片段中,findBook方法与名为books
的缓存相关联
因此,如果我理解正确,您基本上应该使用两种不同的缓存:
@Cacheable(value = "byZone", key = "#zoneMastNo")
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo)
//...
@Cacheable(value = "byArea", key = "#areaMastNo")
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo)
@Cacheable(value=“byZone”,key=“#zoneMastNo”)
公共列表getAreaNameOptionList(字符串本地,长区域序号)
//...
@可缓存(value=“byArea”,key=“#areaMastNo”)
公共列表getLocalityNameOptionList(字符串本地,长区域编号)
此外,您确定这些方法不会根据local
参数产生不同的结果吗?如果没有,它的用途是什么
对每个服务都使用cacheable是一个好主意吗
没有,原因如下:
- 有些方法足够快
- …缓存本身就带来了一些开销
- 有些服务调用其他服务,是否需要在每个层次结构级别上进行缓存
- 缓存需要大量内存
- 缓存失效是很困难的
在指定的时间之后,缓存是否会在不使用@cacheexecute的情况下从内存中完全删除
这完全取决于缓存实现。但是每个sane实现都有这样一个选项,例如EhCache。这意味着如果我在EhCache.xml中定义为:timeToIdleSeconds=“180”timeToLiveSeconds=“180”overflowToDisk=“true”DiskExpireythReadIntervalseconds=“180”,它将在3分钟后删除缓存值?您还可以剪切一些解释元素属性用途的链接吗
@Cacheable(value = "byZone", key = "#zoneMastNo")
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo)
//...
@Cacheable(value = "byArea", key = "#areaMastNo")
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo)