java实现缓存_HashMap缓存 Java实现

一般是采用HashMap来作为缓存的存储结构,但Java没有全局变量的概念,怎么保证缓存中的数据不被垃圾回收器收集,而造成数据的丢失呢?

请问一般的缓存是怎样保证数据的独立性(即脱离垃圾回收器)的?

做一个判断,HashMap取不到值就到数据库里再读数据

系统第一次起来,或是第一次取数据后将数据

保存在一个static的Map里即可,凡是缓存的东西

总是经常用到的,所以一般是保持强引用,GC应该

会清理

(1)jive[Jive 是一个开放的 Java 源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于 JSP 的 论坛。]里面,是使用单态模式维护一个工厂实例,做为程序的入口,就是无论有多少个在线用户,都只要从该入口进入.在这个工厂实例中,有一个缓存管理类(DatabaseCacheManager)变量,这个类有几个公有变量,如DbUserCache(就是缓存访问过的用户)等.当要获取一个user的用户信息时,它就会先在DbUserCache中查找,如果找不到,那么就从数据库中读取,再放入缓存中.

singleton模式:

public   class   DataCache   {

protected   static   final   HashMap   map   =   new   HashMap();   //   Cache   table

private   static   final   Object   lock   =   new   Object();

private   DataCache()   {}   //   防止在外部实例化

public   static   Object   getData(Object   key)   {

Object   v   =   map.get(key);

if   (v   ==   null)   {

synchronized(lock)   {

v   =   map.get(key);     //   Check   again   to   avoid   re-load

if   (v   ==   null)   loadDataSource(key);

v   =   map.get(key);   //   retrieves   data.

}

}

return   v;

}

/*

*Load   data   from   data   source.

*/

protected   static   synchronized   void   loadDataSource(Object   key)   {

Object   value   =   new   Object();   //   Load   value   from   data   source

map.put(key,   value);

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-06-27 11:48

浏览 11399

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值