All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.foxinmy.weixin4j.cache.CacheManager Maven / Gradle / Ivy

There is a newer version: 1.10.2
Show newest version
package com.foxinmy.weixin4j.cache;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

import com.foxinmy.weixin4j.exception.WeixinException;

/**
 * 缓存管理类
 *
 * @className CacheManager
 * @author jinyu([email protected])
 * @date 2016年5月27日
 * @since JDK 1.7
 * @see
 */
public class CacheManager {
	protected final CacheCreator cacheCreator;
	protected final CacheStorager cacheStorager;
	private final ReentrantLock lock = new ReentrantLock();

	public CacheManager(CacheCreator cacheCreator,
			CacheStorager cacheStorager) {
		this.cacheCreator = cacheCreator;
		this.cacheStorager = cacheStorager;
	}

	/**
	 * 获取缓存对象
	 *
	 * @return 缓存对象
	 * @throws WeixinException
	 */
	public T getCache() throws WeixinException {
		String cacheKey = cacheCreator.key();
		T cache = cacheStorager.lookup(cacheKey);
		try {
			if (cache == null && lock.tryLock(3, TimeUnit.SECONDS)) {
				try {
					cache = cacheStorager.lookup(cacheKey);
					if (cache == null) {
						cache = cacheCreator.create();
						cacheStorager.caching(cacheKey, cache);
					}
				} finally {
					lock.unlock();
				}
			}
		} catch (InterruptedException e) {
			throw new WeixinException("get cache error on lock", e);
		}
		return cache;
	}

	/**
	 * 刷新缓存对象
	 *
	 * @return 缓存对象
	 * @throws WeixinException
	 */
	public T refreshCache() throws WeixinException {
		String cacheKey = cacheCreator.key();
		T cache = cacheCreator.create();
		cacheStorager.caching(cacheKey, cache);
		return cache;
	}

	/**
	 * 移除缓存
	 *
	 * @return 被移除的缓存对象
	 */
	public T evictCache() {
		String cacheKey = cacheCreator.key();
		return cacheStorager.evict(cacheKey);
	}

	/**
	 * 清除所有的缓存(请慎重)
	 */
	public void clearCache() {
		cacheStorager.clear();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy