Java 如果只需要缓存特定对象,为什么要缓存整个POJO
在此链接中: 他们说:Java 如果只需要缓存特定对象,为什么要缓存整个POJO,java,caching,ehcache,Java,Caching,Ehcache,在此链接中: 他们说: When the above POJO is defined as a bean in a Spring IoC container, the bean instance can be made 'cacheable' by adding merely one line of XML configuration. 如果不使用缓存框架,我只会将Weather和List声明为static,这样就可以处理缓存了 所以我的问题是,如果我只想缓存天气和列表,那么为什么要缓存整个D
When the above POJO is defined as a bean in a Spring IoC container, the bean instance can be made 'cacheable' by adding merely one line of XML configuration.
如果不使用缓存框架,我只会将Weather和List声明为static,这样就可以处理缓存了
所以我的问题是,如果我只想缓存天气
和列表
,那么为什么要缓存整个DAO?同样在幕后,注释
@Cacheable
是否将Weather
和List
转化为静态变量?这就是问题中的代码:
public interface WeatherDao {
public Weather getWeather(String zipCode);
public List<Location> findLocations(String locationSearch);
}
public class DefaultWeatherDao implements WeatherDao {
@Cacheable(cacheName="weatherCache")
public Weather getWeather(String zipCode) {
//Some Code
}
@Cacheable(cacheName="locationSearchCache")
public List<Location> findLocations(String locationSearch) {
//Some Code
}
}
公共接口{
公共天气getWeather(字符串zipCode);
公共列表查找位置(字符串位置搜索);
}
公共类DefaultWeatherDao实现WeatherDao{
@可缓存(cacheName=“weatherCache”)
公共天气getWeather(字符串zipCode){
//一些代码
}
@可缓存(cacheName=“locationSearchCache”)
公共列表查找位置(字符串位置搜索){
//一些代码
}
}
我不太理解你关于静态变量的观点。本质上,有一张从zipCode
到Weather
的地图,类似于从locationSearch
到List
。此映射可以来自数据库、文件、外部API等
是否要创建一个将所有可能的参数作为键和相应值的映射?当然可以,但它有几个缺点:
- 你给你的堆施加了很大的压力。在许多情况下,数据量可能永远无法放入内存,甚至无法放入磁盘(想想:通过存储每个可能的搜索查询和点击列表来缓存Google搜索引擎)
- 最有可能的是,你永远不会使用大多数钥匙。为什么要将它们存储在内存中
- 驱逐怎么办?我敢打赌,这些方法往往会在一段时间内为相同的邮政编码返回不同的天气
由于我不完全理解您的论点,让我简要解释一下调用getWeather()
时幕后发生的情况:
- 透明代理拦截
getWeather()
调用并查找weatherCache
- 在该缓存中,它使用
zipCode
参数作为缓存键
- 如果存在此类条目(类型
Weather
),则会立即返回
- 如果上述情况并非如此,则将控制权委托给real
getWeather()
方法。它可以调用一些API、运行数据库查询或进行一些冗长的计算
getWeather()
的结果被放置在weatherCache
中以供将来参考
此处不涉及静态
顺便说一句,这可能使谷歌代码项目过时。它看起来相同,并且允许与不同的缓存实现无缝集成。“Weather and List as static”-这些是类,您的意思是*
getWeather()`和findLocations()
static*“。另外,您认为制作任何<代码>静态代码>都能帮到您吗?谢谢。但是为什么我需要缓存整个DAO呢?我只需要看一下地图@Kaushik:我不明白你说的“缓存整把刀”是什么意思。当它们说:bean实例可以被设置为“可缓存”…bean实例是什么?“天气”豆?