首页 > 代码库 > 缓存学习小结(一)

缓存学习小结(一)

(Java)缓存的分为文件缓存或磁盘缓存(disc cache)和内存缓存(memory cache)两种;文件缓存就是把数据存储在本地磁盘上,内存缓存通常是一个map.缓存的作用就是把首次从网络的获取数据保存起来,当再次访问的时候可以直接从缓存中获取数据而不是从网络中重新加载。可以减少系统开销,提高响应速度。

单独使用内存缓存和单独使用文件缓存应用的执行流程如下所示:

内存缓存和文件缓存同时使用的情况下的流程图大致如下所示:

需要注意的是,当从网络加载数据的时候用一个线程或者提供一个线程池来完成这个功能是比较好的选择。同时需要注意的是由于获取数据的方法需要返回值,根据上面的流程图可知返回的数据的途径可以模拟一个包含了磁盘缓存和内存缓存的实现方案。

public class CacheDemo {
	private ExecutorService pool = Executors.newFixedThreadPool(6);
	private HashMap<String, SoftReference<Data>> memoryCache;// 内存缓存
	public CacheDemo(int imageSaveCount, Data defaultData) {
		memoryCache = new HashMap<String, SoftReference<Data>>();
	}
	/**
	 * 加载数据
	 * @param saveFolder
	 *            文件缓存的路径
	 * @param dataUrl
	 *            数据的地址
	 * @return
	 */
	Path path = null;
	public Data loadData(String saveFolder, final String dataUrl)
			throws InterruptedException, ExecutionException {
		// 判断缓存中是否有数据
		if (memoryCache.containsKey(dataUrl)) {
			SoftReference<Data> softReference = memoryCache.get(dataUrl);
			if (softReference != null) {
				Data data = http://www.mamicode.com/softReference.get();>