Redis + EJB 缓存实现(四)

前提

  由上可知,数据缓存需要加在②位置,并且是没有发生远程调用的方法上。因为同一个类上的对数据操作是可知的。这样,加缓存和清缓存的操作就可知了。

加缓存的拦截器方法实现 public Object cache(InvocationContext ctx) throws Exception{System.out.println("进入拦截器");if(cachepro.getFlag() == false){InputStream in = (ctx.getTarget().getClass().getResourceAsStream("/config/cache.xml"));byte[] byt = new byte[in.available()];in.read(byt);cache.init(byt);}//取得类名String className = ctx.getTarget().getClass().getSimpleName(); //取得方法名String methodName = ctx.getMethod().getName(); //取得参数Object[] args = ctx.getParameters();String arg = "";for(int i=0;i<args.length;i++){arg = arg + args[i].toString();}//主键值,由系统名称+类名,删除时用String mainKey = cachepro.getPrefixion() + className; //次级键值由主键值再加上方法名和参数String key = mainKey + methodName + arg; //次级键值存在则返回结果if(cache.ishave(key)){return cache.get(key);}else{//次级键值不存在则将次级键值存入主键值下Object result = ctx.proceed();cache.set(mainKey, key);cache.set(key,result);return null;}}删除缓存拦截器方法实现 public Object cache(InvocationContext ctx) throws Exception{if(cachepro.getFlag() == false){InputStream in = (ctx.getTarget().getClass().getResourceAsStream("/config/cache.xml"));byte[] byt = new byte[in.available()];in.read(byt);cache.init(byt);}//取得类名String className = ctx.getTarget().getClass().getSimpleName(); //系统名+类名生成主键值,对应添加时的String mainKey = cachepro.getPrefixion() + className; //删除时,取得主键值下的次级键值,删除缓存cache.del(mainKey);return null;}

问题描述

解决思路

,你不能左右天气,但你能转变你的心情

Redis + EJB 缓存实现(四)

相关文章:

你感兴趣的文章:

标签云: