1. 程式人生 > >JAVA之編寫簡單快取類

JAVA之編寫簡單快取類

一、問題

         這幾天寫webservice提供介面時

                 問題:當前臺通過條件呼叫介面查詢資料時,查詢的資料量太大。

                  為了減小前臺的壓力,又要減少後臺對資料庫的多次訪問(個人理解),可以使用快取類來解決該問題。

二、主要的設計邏輯如下圖:

                      

三、具體流程:

         將原來單純的通過引數傳入返回所有資料的邏輯方法改為(兩個方法+快取類)的方式    

(1) 快取類:以Map形式儲存,key(此處稱為OutKey)為對應的時間字串,value也是一個map

                                (該map的key稱為inKey,將inKey設計為是對應的頁碼),

 該map目的是將所有記錄按

                                照指定的條數分段,將來使用者獲取時,可傳入Outerkey和inKey,首先找到指定條件

                                查詢出來的記錄,再根據頁碼inkey找到對應的第幾頁的資料,然後給使用者返回。    

                                 存入的細節具體如下圖:                          

  (2)方法一:根據條件獲取查詢記錄總條數和快取類對應資料的key值(該key為存入快取Map時

                                  的時間字串)

(3)方法二:根據key和頁碼(頁碼與內map裡的key對應),這樣即可找到某個條件查詢資料下的第幾頁數                                     據。

四、快取Map的定時清除

            如果不同的條件多次訪問伺服器,每次都將資料存入快取Map,這樣快取Map就會越來越大,這樣就需要定

             時刪除功能,定時刪除必須知道開始時間,前邊存入快取Map時的key即為對應開始時間,這樣就簡單多了

            具體如下:

五、犯的小問題

    (1)將如下方法的時間寫成了獲取當前時間值,哈哈,這樣導致該TimerTask方法執行時是在兩千年後.。。。。。。

       

 (2)注意快取Map是隨伺服器關閉而內容消失的,而我,非要在調取第一個方法的時候,拿到key,然後關閉main              方法,再掉第二個方法,一直沒有拿到值,而且還自我肯定了半天是TimerTask寫錯了。。

相關推薦

JAVA編寫簡單快取

一、問題          這幾天寫webservice提供介面時                  問題:當前臺通過條件呼叫介面查詢資料時,查詢的資料量太大。                   為

從零開始學Java 編寫簡單的工程

筆者本人從最初開始接觸C語言、C++、VC++、彙編到後來接觸PHP以及Java,在這些語言的使用過程中深刻感受到這些語言都是相同的編寫思路,程式碼編寫的方式也是大同小異,目前認為Java語言的亮點是package以及反射機制。 package不僅提供

java基本數據

長整型 浮點型 java組合 float 必須 計算 line style 浮點數 11,java裏面有沒有long double類型或者比double更精度的? =========== 11,java裏面有沒有long double類型或者比double更精度

Hadoop基礎-MapReduce入門篇編寫簡單的Wordcount測試程式碼

            Hadoop基礎-MapReduce入門篇之編寫簡單的Wordcount測試程式碼                                               作者:尹正傑 版權宣告:原創作品,謝絕轉載!否則將追究法律責任。        

Java路:抽象

抽象類 在Java中可以建立一種類專門用來做父類,這種類稱為“抽象類”。抽象類實際上也是一個類,只是與之前的普通類相比,內部新增了抽象方法。 1、抽象方法 抽象方法是隻宣告而未實現的方法。 例: void f(); // 只有宣告,沒有實現。 2、抽象類的定義與使

Java路:抽象與介面對比

先上圖: 下面詳細說下: 1、相同點 (1)都是抽象型別; (2)都可以有實現方法;抽象類中可以實現普通方法,介面中可以實現預設方法(Java 8)。 (3) 都可以不需要實現類或者繼承者去實現所有方法。(以前不行,現在介面中預設方法不需

javaMessageDigest簡單使用總結

MessageDigest是Java自帶的類, 可以通過該類進行 比如 sha1. md5等 摘要演算法 public class MD5AndSHA { public final static String MD5_SHA(String s, Stri

Javaeclipse將工具打成Jar包、使用jar包、以及刪除jar包

Eclipse如何匯出jar包??? 選中對應的工具類,右鍵==>Export... ==>選中Java目錄下的JAR File==>Next==>選擇匯出路徑==>Fi

Java路:System對I/O的支援

為了支援標準輸入輸出裝置,Java定義了3個特殊的流物件常量: 錯誤輸出:public static final PrintStream err; 系統輸出:public static final PrintStream out; 系統輸入:public static final Inp

Java路:RandomAccessFile

Java提供了專門處理檔案的類,即RandomAccessFile(隨機訪問檔案)類。該類是Java語言中功能最為豐富的檔案訪問類。 RandomAccessFile類支援“隨機訪問”方式,“隨機”是指可以跳轉到檔案的任意位置處讀寫資料。 在訪問一個檔案的時候,不必把檔

JAVABDB資料庫工具抽象實現

import java.io.File; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.DatabaseEntry; import com.s

Java Swing編寫簡單的測試小工具介面(原始碼)

Author:Pirate Leo 前段時間我負責在系統中添加了HBase用於管理海量資料,功能實現後自然到了效能測試階段,效能、可靠性、穩定性,性性都不能少。 因此就有了個內部的小需求:“給測試部提供一個工具,可以向HBase寫入資料,以達到測試所需的資料量”。

java applet 編寫簡單示例

java applet簡介: Applet可以翻譯為小應用程式,Java Applet就是用Java語言編寫的這樣的一些小應用程式,它們可以直接嵌入到網頁中,並能夠產生特殊的效果。包含Applet的網頁被稱為Java-powered頁,可以稱其為Java支援的網頁。

JavaInteger內部快取

在Java中,每次建立物件都要進行記憶體分配操作,為了減少頻繁地建立物件,許多地方採用池來存放物件,如String中的字串池,對於基本型別,對應的包裝類中皆有快取來避免頻繁建立物件,如Integer。 Integer中的靜態內部類IntegerCache原始碼

Java語言編寫簡單的QQ登入介面

import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Label; import javax.swing.JButton; import javax.swing.JFrame; i

Java語言編寫簡單聊天程式

<span style="font-size:18px;"></span><pre name="code" class="java"><span style=

JavaDate簡單測試

public class Demo01 { @Test public void test() { Date now=new Date(); System.err.println(now); System.out.print(""); int date=no

Java請求傳送工具(HttpClientUtils,爬蟲)-yellowcong

Java傳送請求,之前做過一段時間的爬蟲,所以寫了這個請求傳送的工具,這個工具偽裝成百度,然後去爬取推酷的資料,當時是由於推酷有ip訪問限制,你如果是爬蟲,就不讓訪問了,所以我偽裝成了百度,然後就可以隨便爬取推庫的資料了,當時爬了1GB多的文字資料,然後圖

Java陣列查詢Arrays的binarySearch()方法詳解

Arrays類的binarySearch()方法,可以使用二分搜尋法來搜尋指定的陣列,以獲得指定物件。該方法返回要搜尋元素的索引值。binarySearch()方法提供多種過載形式,用於滿足各種型別陣

Java反射四大核心Class/Constructor/Method/Field

首先什麼是反射?反射指的是物件的反向操作,先通過以下程式碼看看什麼是正向操作。package www.bit.java.reflect; import java.util.Date; public class Test { public static void main(S