`

小知识点-第五讲

 
阅读更多

今天说缓存

 

缓存是一块为提升系统性能开发的内存空间。主要作用是暂存数 据处理的结果,并提供下次访问使用。很多场合,数据的处理或数据获取都比较耗时耗资源,频繁的访问处理等有可能会耗尽cpu资源,因此采用缓存,将结果缓存起来,当其他线程或者客户端访问时,直接将结果 从缓存中取出返回。以此来提高系统的响应时间。

 

最简单的实现缓存:使用hashmap对象,这样做有一些问题,如何清理无效的数据,如何防止缓存数据过。多而导致内存溢出等等。一个稍好的直接方案,采用WeakHashMap 他 使用了弱引用维护一张哈希表,从而避免了内存溢出的问题。 再自己自我实现的小框架中 采用 CurrentHashMap+ 软引用 + 缓存策略(定时销毁)来实现一个简单的缓存小框架功能(并做好适配,毕竟缓存框架有很多)我这里只不想引用那些jar 包而写的,开源框架的功能比较完善。如何使用其他框架,那必须做到快速适配,不需要修改客户端调用代码,即可完成,感觉这个做的还不错。

现在主要说一下 通过动态代理来实现缓存方案。,使用动态代理无需修改一个逻辑方法的代码,便能增加缓存提高系统性能。

 

这里可以举例来说 通过cglib 生成动态代理类的方法拦截器。

 

public clas Cglibinterceptor implements MethodInterceptor{

A a = new A();

 

public Object intercept(Object obj,Method arg1,Object[] arg2,MethodProxy arg3) throws Throwable{

 

Object v = CacheUtil.get("cache",(Seriaalizable)arg2[0]);

if(v == null){

v = a.heavyMethod(((Integer)arg2[0]));

       CacheUtil.put("cache",(Integer)arg2[0],v);

}

               return v;

}

 

}

 

 

public static A newA{

 

Enhancer enhancer = new Enhander();

        enhancer.setSuperclas(A.class);

        enhancer.setCallback(new Cglibinterceptor() );

        A proxy = (A)enhancer.create();

        return proxy;

}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics