HASHMAP緩存簡單java實現

 

一般是採用HashMap來作爲緩存的存儲結構,但Java沒有全局變量的概念,怎麼保證緩存中的數據不被垃圾回收器收集,而造成數據的丟失呢?  

   

  請問一般的緩存是怎樣保證數據的獨立性(即脫離垃圾回收器)的?  

做一個判斷,HashMap取不到值就到數據庫裏再讀數據

 

系統第一次起來,或是第一次取數據後將數據  

  保存在一個static的Map裏即可,凡是緩存的東西  

  總是經常用到的,所以一般是保持強引用,GC應該  

  會清理

(1)jive裏面,是使用單態模式維護一個工廠實例,做爲程序的入口,就是無論有多少個在線用戶,都只要從該入口進入.在這個工廠實例中,有一個緩存管理類(DatabaseCacheManager)變量,這個類有幾個公有變量,如DbUserCache(就是緩存訪問過的用戶)等.當要獲取一個user的用戶信息時,它就會先在DbUserCache中查找,如果找不到,那麼就從數據庫中讀取,再放入緩存中.  

   

  [email protected](聯繫我)

 

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);  

          }  

  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章