1. 程式人生 > >淺談JAVA資料快取

淺談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);  
          }  
  }

相關推薦

JAVA資料快取

一般是採用HashMap來作為快取的儲存結構,但Java沒有全域性變數的概念,怎麼保證快取中的資料不被垃圾回收器收集,而造成資料的丟失呢?         請問一般的快取是怎樣保證資料的獨立性(即脫離垃圾回收器)的?   做一個判斷,HashMap取不到值就到資料庫裡

Java中的八種基本資料型別

1)四種整數型別(byte、short、int、long):    byte:8 位,用於表示最小資料單位,如檔案中資料,-128~127    short:16 位,很少用,-32768 ~ 32767    int:32 位、最常用,-2^31-1~2^31  (21 億

JAVA驗證碼~

puts oid blog 方式 log 需求 .html index.jsp script 這兩天在幫同學做個項目,項目中需要做個驗證碼,說實話那麽多年竟然沒註意過這東西,原理很簡單,貼出來給大家做個參考。 1、簡單介紹 一般稍微有些經驗的程序員都不會再自己寫原生驗證碼生

Java中的hashCode方法

implement state ask get() 存在 rsa key 沖突 如何 哈希表這個數據結構想必大多數人都不陌生,而且在很多地方都會利用到hash表來提高查找效率。在Java的Object類中有一個方法: public native int hashCode(

java內存分配和回收策略

內存空間 高效率 cde map details 閾值 老年代 total 關於 一、導論   java技術體系中所提到的內存自動化管理歸根結底就是內存的分配與回收兩個問題,之前已經和大家談過java回收的相關知識,今天來和大家聊聊java對象的在內存中的分配。通俗的講,對

Java集合框架

順序 eem map pre 叠代器 static 支持 print ted 集合框架最大的作用就是維護一組類型同樣的對象。僅僅是不同的類有不同的行為和性能。通常關註下面這些行為: 是否能存放反復的元素遍歷的順序是如何的是否支持多線程 以下首先介紹集合的經常使用,隨

Java的學習

override web ring 只知道 網頁標簽 insert語句 知識 reg 模型 Java就是用來做項目的!Java的主要應用領域就是企業級的項目開發!要想從事企業級的項目開發,你必須掌握如下要點: 1、掌握項目開發的基本步驟2、具備極強的面向對象的分析與設計技巧

java中內置的觀察者模式與動態代理的實現

所有 代理 notify play ani effect 一個 indicate protected 一.關於觀察者模式 1.將觀察者與被觀察者分離開來,當被觀察者發生變化時,將通知所有觀察者,觀察者會根據這些變化做出對應的處理。 2.jdk裏已經提供對應的Observer

Java中的深拷貝和拷貝

detail tle pac err @override 復制對象 deep har 間接   淺談Java中的深拷貝和淺拷貝(轉載) 原文鏈接: http://blog.csdn.net/tounaobun/article/details/8491392 假如說你想復制一

201671010116. 2016-2017-3《Java程序設計》Java

虛擬 專業 ble ise 解釋執行 long [] 程序編譯 orm 1.Java的工作方式:java把程序編譯為字節碼,字節碼可以在提供了Java虛擬機的任何系統上被解釋執行 。 源文件:文件名.java→字節碼文件:文件名.class→java虛擬機支持程序運行 2.

java異常[Exception]

你在 這也 一點 io操作 www. 新手 公司 manager other 淺談java異常[Exception] 一. 異常的定義 在《java編程思想》中這樣定義 異常:阻止當前方法或作用域繼續執行的問題。雖然java中有異常處理機制,但是要明確一點,決不應該

JAVA中“增強”類的某個方法的幾個中方法!

exc 目標 byte 相同 nbsp 優點 method value oca 一、繼承 使用場景:能夠控制這個類的構造的時候,才可以使用繼承。  優點:簡單容易使用, 缺點:耦合性大大的增強,不利於後期的維護,所以對於繼承這種方法,謹慎使用。 代碼實現:二、裝飾者模式 

Java SE、Java EE、Java ME三者的區別

網絡 orien service 離線 web 手機 規範 嵌入 ice 1. Java SE(Java Platform,Standard Edition)。Java SE 以前稱為 J2SE。它允許開發和部署在桌面、服務器、嵌入式環境和實時環境中使用的 Java 應用程

JAVA中字符串常量的儲存位置

數據 每一個 [] jit 返回 inf post 符號 boolean 在講述這些之前我們需要一些預備知識: Java的內存結構我們可以通過兩個方面去看待它。 一、從抽象的JVM的角度去看。相關定義請參考JVM規範:Chapter 2. The Structure o

java中的"=="和eqals區別

short copy 覆寫 main 否則 變量 程序 bar gif 在初學Java時,可能會經常碰到下面的代碼: 1 String str1 = new String("hello"); 2 String str2 = new String("hello");

Java基礎8-java程序的運行機制與JVM運行

style 窗口 exe 了解 體感 語法 我們 nbsp .exe 一、java程序的運行機制 Java開發的整個生命周期,可以概括為兩個階段:編譯階段和運行階段。 1.編譯階段 ①程序員編寫一個符合java語法的xx.java的源文件。 ②使用javac.exe命令對以

java放射機制

bject bootstrap pan voc get set class文件 獲得 訪問 java反射機制概念: 用途:JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取

java拷貝和深拷貝

原來 變量 基本數據 的區別 引用數據類型 復制 值傳遞 ec2 深拷貝和淺拷貝 前言:深拷貝和淺拷貝的區別是什麽? 淺拷貝:被復制的對象的所有變量都含有原來對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之, 淺拷貝僅僅復制所考慮的對象,而不復制它所引用的對

最近在研究多線程,JAVA中多線程的幾種實現方式

進行 數據 使用 導致 效率問題 多線程 方法 sta img 多線程的實現方式:   個人認為,要說多線程的實現方式,萬變不離其宗,最基本的就是兩種1.繼承Thread類;2.實現runnable接口,本質上來說就是用來啟動線程執行任務的過程,具體來說的話,通過這

Java中的物件和物件的引用

淺談java中的物件和引用 文章轉載出處:https://www.cnblogs.com/dolphin0520/p/3592498.html 在Java中,有一組名詞經常一起出現,它們就是“物件和物件引用”,很多朋友在初學Java的時候可能經常會混淆這2個概念,覺得它們是一回事,事