集成j2cache快速实施缓存方案

像Spring Cache一样方便容易的使用缓存,本方案虽然从使用便利程度上说相对弱一些,但是从功能上说多了一个一级缓存性能层面大大提高。

方案采用j2cache:

1、

public class J2Cache implements ICache{
	
	private String db ;
	private CacheChannel cache ;
	private Map<String,String> cacheExpire;
	private long defaultTimeToLiveInSeconds = 0;//默认不缓存
	
	public J2Cache(String dbName,CacheChannel cache,Map<String,String> cacheExpire) {
		this.cache = cache;
		this.db = dbName;
		this.cacheExpire = cacheExpire;
		if(cacheExpire != null)
		this.defaultTimeToLiveInSeconds = expireValue2Long(cacheExpire.get("default"));
	}
	
	@Override
	public <T> T get(String cacheName, Object key) {
		// TODO Auto-generated method stub
		
		return (T)cache.get(db+"_"+cacheName, key.toString()).getValue();
	}

	@Override
	public void put(String cacheName, Object key, Object value) {
		// TODO Auto-generated method stub
		if(cacheExpire != null) {
			long timeToLiveInSeconds = getTimeToLiveInSeconds(db+"_"+cacheName);
			if(timeToLiveInSeconds>0)
				cache.set(db+"_"+cacheName, key.toString(), value, timeToLiveInSeconds);
		}else
			cache.set(db+"_"+cacheName, key.toString(), value);
	}

	@Override
	public void remove(String cacheName, Object key) {
		// TODO Auto-generated method stub
		cache.evict(db+"_"+cacheName, key.toString());
	}

	@Override
	public void removeAll(String cacheName) {
		// TODO Auto-generated method stub
		LogKit.info("clearn cache:" + db+"_"+cacheName);
		//cache.clear(db+"_"+cacheName);//清除直接卡死
		cache.clear(cacheName);
		
		LogKit.info("clearn cache:%s end" , db+"_"+cacheName);
	}
	
	
	public long getTimeToLiveInSeconds(String cacheName) {
		String value = cacheExpire.get(cacheName);
		if(!xx.isEmpty(value)) {
			return expireValue2Long(value);
		}
		return defaultTimeToLiveInSeconds;
	}
	
	//xxxx[s|m|h|d]结尾
	private long expireValue2Long(String expireValue) {
		long mstime = 0;
		expireValue = expireValue.trim();
		try {
			if(expireValue.endsWith("s")) {
				mstime = Long.parseLong(expireValue.substring(0, expireValue.length()-1));
			}else if(expireValue.endsWith("m")) {
				mstime = Long.parseLong(expireValue.substring(0, expireValue.length()-1))*60;
			}else if(expireValue.endsWith("h")) {
				mstime = Long.parseLong(expireValue.substring(0, expireValue.length()-1))*60*60;
			}else if(expireValue.endsWith("d")) {
				mstime = Long.parseLong(expireValue.substring(0, expireValue.length()-1))*24*60*60;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
		}
		return mstime;
	}

}

2、JFinalConfig .configPlugin初始化

                J2Cache mainCache = null;
		J2Cache bbCache = null;
			try {
				J2CacheConfig config = J2CacheConfig.initFromConfig("/j2cache.properties");
				String l1CacheName = config.getL1CacheName();
				Map<String,String> cacheExpire = null;
				if("none".equalsIgnoreCase(l1CacheName)) {//只用redis,需要自己管理redis失效
					cacheExpire = new HashMap<String, String>();
					
					Iterator<Entry<Object, Object>> it = config.getProperties().entrySet().iterator();
					while (it.hasNext()) {
						Entry<Object, Object> entry = it.next();
						String key = entry.getKey().toString();
						String value = entry.getValue().toString();
						
						cacheExpire.put(key, value);
					}
				}

				//填充 config 变量所需的配置信息
				J2CacheBuilder builder = J2CacheBuilder.init(config);
				cache = builder.getChannel();
				
				bbCache = new J2Cache(EovaConst.DS_EOVA,cache,cacheExpire);
				mainCache = new J2Cache(EovaConst.DS_MAIN,cache,cacheExpire);
			} catch (IOException e) {
				
			}
		
		
		

			DruidPlugin dp = initDruidPlugin(mainUrl, mainUser, mainPwd);
			ActiveRecordPlugin arp = initActiveRecordPlugin(mainUrl, xx.DS_MAIN, dp);
			System.out.println("load data source:" + mainUrl + "/" + mainUser);
			if(mainCache != null)
				arp.setCache(mainCache);

3、执行带缓存的查询方法即可

findByCache(cacheName, key, sql)

4、清除

cache.removeAll(cacheName);
和cache.remove(cacheName, key);


具体见项目:http://h.bblocks.cn/

喜欢的小伙伴给个赞呗~

评论区

久伴轻尘

2020-05-19 17:34

页面看的太难受了

balance_jin

2020-05-19 17:39

@久伴轻尘 啥页面看的难受啊。。。

久伴轻尘

2020-05-20 09:38

@balance_jin 整体感觉不好,如果说具体页面 控件演示页面完全不协调,给人的不太好,可以去参考下目前前端的比较火的几个ui,效果肯定比h+要好,几个牛皮的element ant iview之类的,做快速开发很轻松,而且不用自己一个个去找一些插件,整体协调性会更好