當前位置:首頁 » 硬碟大全 » 設計本地緩存系統
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

設計本地緩存系統

發布時間: 2022-11-02 06:35:13

Ⅰ SSD怎樣做系統緩存

把系統臨時文件夾,IE臨時文件夾或者你所使用的瀏覽器的緩存目錄,以及虛擬內存什麼的都設置到SSD硬碟里,你這個32G的有點小,裝系統有點壓力,要是換個64G的就直接把系統裝進去吧.那個什麼readyboost就算了,那東西是為了解決內存不足引起系統變慢的問題而設計的,你電腦應該不存在內存不足的問題吧,不用去折騰它.

Ⅱ UCWEB瀏覽器設置—系統設置—瀏覽器設置—本地緩存,它默認是關,是否需要把它設置為手機內存或儲存卡

設置為開 如果你的手機內存夠大的話 就設置為手機內存 否則設置為儲存卡 這樣子 你以後再瀏覽相同網頁的時候 會快不少 還有 記得定時清理系統 就用UCweb里的 就行

Ⅲ Java本地緩存有哪些

下面給你介紹幾個常見的java緩存框架:
1、OSCache
OSCache是個一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何Java應用程序的普通的緩存解決方案。
OSCache有以下特點:
緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。
永久緩存--緩存能隨意的寫入硬碟,因此允許昂貴的創建(expensive-to-create)數據來保持緩存,甚至能讓應用重啟。
支持集群--集群緩存數據能被單個的進行參數配置,不需要修改代碼。
緩存記錄的過期--你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認性能不需要時)。
2、Java Caching System
JSC(Java Caching System)是一個用分布式的緩存系統,是基於伺服器的java應用程序。它是通過提供管理各種動態緩存數據來加速動態web應用。
JCS和其他緩存系統一樣,也是一個用於高速讀取,低速寫入的應用程序。
動態內容和報表系統能夠獲得更好的性能。
如果一個網站,有重復的網站結構,使用間歇性更新方式的資料庫(而不是連續不斷的更新資料庫),被重復搜索出相同結果的,就能夠通過執行緩存方式改進其性能和伸縮性。
3、EHCache
EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速,簡單,為Hibernate2.1充當可插入的緩存,最小的依賴性,全面的文檔和測試。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。

6、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
SwarmCache使用JavaGroups來管理從屬關系和分布式緩存的通訊。

Ⅳ 如何實現緩存系統的更新機制

1)設計兩個緩存池,記為A、B,而A和B的內容都是從後端伺服器資料庫中獲取到的數據。正常情況下,客戶端的請求都是從緩存池A中獲取緩存內容,
同時,設置一個全局的變數ref用於記錄當前正在訪問緩存A的客戶端數量,來一個客戶端請求將ref值加1,響應完一個客戶端請求後ref減一。

2)當緩存更新時間到時,如果ref不為0,則我們不能直接更新緩存,因為這時有客戶端正在從緩存池A取數據。這里,我們可以借鑒Redis的
rehash思想,更新時間到,我們將客戶端的訪問都引導到B緩存池,此時的緩存池A不再接受新的客戶端數據請求,A的ref變數只減不增,當ref變數
減少到0時,我們便可以更新A緩存池中的內容了。

Ⅳ android 如何實現清理本地數據緩存

一、本地數據緩存分應用內、外緩存:

1、應用內部緩存,緩存被存儲在應用內部,具體位置:/data/data/應用包名/

a、清除緩存(/data/data/com.xxx.xxx/cache)

b、清除所有資料庫緩存(/data/data/com.xxx.xxx/database)

c、清除SharedPreference(/data/data/com.xxx.xxx/shared_prefs)

d、清除文件(/data/data/com.xxx.xxx/files)

2、應用外部緩存(/mnt/sdcard/android/data/com.xxx.xxx/cache)

3、自定義路徑文件,被存儲在設備的SD-CARD上,不同的設備和Android系統版本路徑不一樣,獲取路徑可以通過以下代碼:

1)、獲取內置SD卡路徑

Ⅵ 如何使用bloomfilter構建大型Java緩存系統

在如今的軟體當中,緩存是解決很多問題的一個關鍵概念。你的應用可能會進行CPU密集型運算。你當然不想讓這些運算一邊又一邊的重復執行,相反,你可以只執行一次, 把這個結果放在內存中作為緩存。有時系統的瓶頸在I/O操作上,比如你不想重復的查詢資料庫,你想把結果緩存起來,只在數據發生變化時才去數據查詢來更新緩存。
與上面的情況類似,有些場合下我們需要進行快速的查找來決定如何處理新來的請求。例如,考慮下面這種情況,你需要確認一個URL是否指向一個惡意網站,這種需求可能會有很多。如果我們把所有惡意網站的URL緩存起來,那麼會佔用很大的空間。或者另一種情況,需要確認用戶輸入的字元串是包含了美國的地名。像「華盛頓的博物館」——在這個字元串中,華盛頓是美國的一個地名。我們應該把美國所有的地名保存在內存中然後再查詢嗎?那樣的話緩存會有多大?是否能在不使用資料庫的前提下來高效地完成?
這就是為什麼我們要跨越基本的數據結構map,在更高級的數據結構像布隆過濾器(bloomfilter)中來尋找答案。你可以把布隆過濾器看做Java中的集合(collection),你可以往它裡面添加元素,查詢某個元素是否存在(就像一個HashSet)。如果布隆過濾器說沒有這個元素,這個結果可能是錯誤的。如果我們在設計布隆過濾器時足夠細心,我們可以把這種出錯的概率控制在可接受范圍內。
解釋
布隆過濾器被設計為一個具有N的元素的位數組A(bit array),初始時所有的位都置為0.
添加元素
要添加一個元素,我們需要提供k個哈希函數。每個函數都能返回一個值,這個值必須能夠作為位數組的索引(可以通過對數組長度進行取模得到)。然後,我們把位數組在這個索引處的值設為1。例如,第一個哈希函數作用於元素I上,返回x。類似的,第二個第三個哈希函數返回y與z,那麼:
A[x]=A[y]=A[z] = 1

查找元素
查找的過程與上面的過程類似,元素將會被會被不同的哈希函數處理三次,每個哈希函數都返回一個作為位數組索引值的整數,然後我們檢測位數組在x、y與z處的值是否為1。如果有一處不為1,那麼就說明這個元素沒有被添加到這個布隆過濾器中。如果都為1,就說明這個元素在布隆過濾器裡面。當然,會有一定誤判的概率。
演算法優化
通過上面的解釋我們可以知道,如果想設計出一個好的布隆過濾器,我們必須遵循以下准則:
好的哈希函數能夠盡可能的返回寬范圍的哈希值。
位數組的大小(用m表示)非常重要:如果太小,那麼所有的位很快就都會被賦值為1,這樣就增加了誤判的幾率。
哈希函數的個數(用k表示)對索引值的均勻分配也很重要。
計算m的公式如下:
m = - nlog p / (log2)^2;

這里p為可接受的誤判率。
計算k的公式如下:
k = m/n log(2) ;

這里k=哈希函數個數,m=位數組個數,n=待檢測元素的個數(後面會用到這幾個字母)。
哈希演算法
哈希演算法是影響布隆過濾器性能的地方。我們需要選擇一個效率高但不耗時的哈希函數,在論文《更少的哈希函數,相同的性能指標:構造一個更好的布隆過濾器》中,討論了如何選用2個哈希函數來模擬k個哈希函數。首先,我們需要計算兩個哈希函數h1(x)與h2(x)。然後,我們可以用這兩個哈希函數來模仿產生k個哈希函數的效果:
gi(x) = h1(x) + ih2(x);

這里i的取值范圍是1到k的整數。
Google guava類庫使用這個技巧實現了一個布隆過濾器,哈希演算法的主要邏輯如下:
long hash64 = …; //calculate a 64 bit hash function
//split it in two halves of 32 bit hash values
int hash1 = (int) hash64;
int hash2 = (int) (hash64 >>> 32);
//Generate k different hash functions with a simple loop
for (int i = 1; i <= numHashFunctions; i++) {
int nextHash = hash1 + i * hash2;
}

應用
從數學公式中,我們可以很明顯的知道使用布隆過濾器來解決問題。但是,我們需要很好地理解布隆過濾器所能解決問題的領域。像我們可以使用布隆過濾器來存放美國的所有城市,因為城市的數量是可以大概確定的,所以我們可以確定n(待檢測元素的個數)的值。根據需求來修改p(誤判概率)的值,在這種情況下,我們能夠設計出一個查詢耗時少,內存使用率高的緩存機制。
實現
Google Guava類庫有一個實現,查看這個類的構造函數,在這裡面需要設置待檢測元素的個數與誤判率。
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

//Create Bloomfilter
int expectedInsertions = ….;
double fpp = 0.03; // desired false positive probability
BloomFilter<CharSequence> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.forName("UTF-8")), expectedInsertions,fpp)

Ⅶ JAVA幾種緩存技術介紹說明

1、TreeCache / JBossCache

JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。

2、WhirlyCache

Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。

3、SwarmCache

SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。

4、JCache

JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。

5、ShiftOne

ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。

Ⅷ 關於系統緩存的問題

理解緩存

操作系統的任務主要是合理地調配系統的各種資源,為各種程序的運行提供環境,它可以看作是硬體和應用軟體之間的一個媒介。其中對內存的管理是系統的最主要的職責,怎麼樣使有限的內存用在刀刃上,怎麼要保證系統本身所需的內存(以防止死機,在win2000和winxp里這一點已經做的非常好了),怎樣克服各種硬體連接的瓶頸。

本文主要就這種硬體連接的瓶頸問題展開一些討論。大家知道計算機的主要硬體,硬碟,內存和處理器之間的速度是不一樣的,其中處理器的速度是非常快的,內存次之,而硬碟的速度是很慢的(相對於處理器來說),一件任務的處理要通過處理器給出的指令,把相關數據從硬碟里調出來,到內存,在內存和處理器之間還會有許多數據的傳輸,內存本身不能處理數據,要通過處理器來處理,當他們一起工作的時候,由於處理器和內存工作得快,它們常在把事做完了沒事做了,要等硬碟,這樣就大大降低了系統的整體性能,不能發揮所有硬體的性能。為了解決這個問題,一個優秀的操作系統必然要有「緩存」來作為這些硬體之間的一個中間站,來緩和這種矛盾,從而一定程度上提高系統的性能,「緩存」處理的越好,系統的性能發揮的越好。所以研究「緩存」就有了它的意義。

看了上面的內容,以前對「緩存」沒有認識的朋友應該理解它了。理解之後馬上可以應用的地方就是在自購兼容機的時候。大家大可不必去追趕潮流,買什麼P4處理器,而應該買一個快一點的硬碟,比如買?200轉的(或更快的),以減少瓶頸的矛盾。處理器嗎,買賽揚好了,一般是沒問題的,處理器大多數時候是閑著的,有時處理很多個大任務時可能會有些緊張,注意避免就可以了。

從某種角度講,內存本身是硬碟和處理器之間的一個緩存,它的作用是緩解硬碟和處理器之間的尖銳矛盾的。當它被作為一個固定的部件後,它本身也成了需要用緩存來緩解瓶頸的對象。它對處理器和硬碟夾在中間,是他們的必經之路,硬碟與處理器之間的關系成了硬碟與內存和內存與處理器之間的雙重關系。所以上面提到的瓶頸問題的處理歸結為對內存的優化,即怎樣處理好硬碟與內存之間的緩存很處理器與內存之間的緩存。

對於一個想了解操作系統的人來說,能夠理解「緩存」對對它做適當的優化是比不可少的一節課。另外再不從一下,緩存的概念是很廣泛的,這里專指內存的緩存。
緩存的優化

操作系統本身已經有了很多優化措施,而我們只能在它的優化措施的基礎上根據我們的實際情況來優化。

1,最「著名」的緩存是頁面文件,這個倒不是緩解速度的,而是緩解容量的,在速度上,硬碟不如內存,但是容量上,內存是不可能跟硬碟比的,當你運行一個程序需要大量數據,佔有大量內存時,內存就要被塞滿,怎麼辦呢?把那些暫時不用的放到硬碟里去,因為處理器總是只調用處理一個任務所需的數據,其他的准備的數據(就是那些可能要用的,但暫時還不用的)可以先放一放,如果內存放不下,就只好放到硬碟了。但是這樣做是有代價的,當放到內存的數據重新要被使用時,你就得等很長時間等系統把在硬碟中得數據調上來。其實你可以感受到系統的這些動作,比如你打開IE或Office,第一次打開是很慢的,但是關閉後馬上再打開就快很多,這是因為這時數據還沒被系統「請」出內存,系統從內存中直接取得數據自然快了;另一個情況,當你開了一個photoshop這樣的大軟體,這時打開Office要比平時還慢一點,這是因為內存本來被photoshop佔領著,要調入Office的數據到內存就必須把photoshop的數據「請」出內存,多了這個過程,打開自然要慢一些。

優化頁面文件,可以做一下幾條:

1)把頁面文件放到系統盤之外,這樣做主要是為了保持頁面文件的連續性,硬碟讀取數據是靠磁頭在磁性物質上「讀」得到數據的,頁面文件放在物理上的不同區域,磁頭就要跳來跳去,自然不利於效率。系統盤文件眾多,頁面文件幾乎肯定不連續。所以要把它移到其他盤。要提醒一點,當你移動好頁面文件後,要把原來的刪除掉,系統不會自動刪除。

2)如果有兩個硬碟,把頁面文件放在轉速快的那個,原因上面已講了很多遍了。

3)最大最小頁面文件的設置原則。有很多人建議將這兩個值設置成相等的,我不知道他們是那裡來的依據,其實這樣設置是不合理的。我們先要知道他們兩個值的意義。一般情況下,內存是不會真的「塞滿」,它會在內存儲量到達一定程度時自動將一部分暫時不用的數據放到硬碟,最小頁面文件是所說的「一定程度」的具體比例的決定因素,最小頁面文件大,比例就低,反之則相反;最大頁面文件是極限值,有時你開了很多程序,內存和最小頁面文件都滿了,就自動溢出到最大頁面文件。所以,將兩者設為一樣大是不合理的。最小頁面文件要小一些,這樣能夠在內存中盡可能存更多的數據,效率就高,最大頁面文件大一些,以免出現「全滿」的的情況。

4)winxp現在支持4G內存,哪怕你有5,6百M的內存,你都不需頁面文件了,這時可以把頁面文件禁掉。到注冊表編輯器HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management下,找到DisablePagingExecutive(禁用頁面文件)設其值為1。
5)在同上的注冊表編輯器位置上有個ClearPageFileAtShutdown(關機時清除頁面文件),這里所說的「清除」頁面文件(即虛擬內存)並非是指從硬碟上完全刪除pagefile .sys這個文件,而是對其進行「清洗」和整理,從而為下次啟動Win2K更好地利用虛擬內存作好准備。這樣做還有利於安全,頁面文件上的殘留的數據是可以用特殊的工具讀到的,而這些數據你可能並不想讓人知道。這樣做的代價是關閉系統時間會加長。 將其值設為1即可。

6)學過C的朋友們應該對操作內存有個概念,一個任務完成後,要用free函數來釋放內存,但有很多軟體在設計的時候,並沒有在所有環節都這樣做,這會造成無用的數據占據內存,對這種情況可以使用一些內存優化軟體,讓這鍾軟體來完成釋放內存的動作。

2,下面介紹和優化一些不著名的緩存:

1)內存讀取硬碟數據要經過一個系統緩存(system cache),它的位置是在內存的特定區域,它是用來緩解硬碟與內存之間的速度不平衡的。它是以犧牲內存資源來換取從硬碟讀取數據時的速度的,有了這塊緩存,系統能從硬碟預讀所需的數據,減少系統等待的時間。如果你的內存很大,比如5,6百M,那麼你除了可以採取上面說的關閉頁面文件的方法外,還可以起用打的系統緩存。做法如下,進入注冊表編輯器: HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management,找到LargeSystemCache(啟用大的系統緩存),將它的值設為1就可以了。

這樣設置了後,systemcache從4M增加到8M,再win2000和winxp中,這個值是動態的,如果內存不足,systemcache占據的空間可以自動相應調整。

2)處理器從內存讀取數據的緩存是什麼呢?是二級數據高級緩存(緩沖),同樣它也要在內存中佔一個空間,所以最好是有了大內存之後再設置這個值。也需再注冊表裡設置,方法如下:進入 HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management ,找到 SecondLevelDataCache,默認為256,大內存設為512。

好了經過了上面的介紹,我想對朋友們來說最重要收獲的是加深了對緩存和操作系統的認識,至於優化的方法,我得承認一般的朋友是用不著去做的,當然「玩」一下也是很有意思的。

1)把頁面文件放到系統盤之外,這樣做主要是為了保持頁面文件的連續性,硬碟讀取數據是靠磁頭在磁性物質上「讀」得到數據的,頁面文件放在物理上的不同區域,磁頭就要跳來跳去,自然不利於效率。系統盤文件眾多,頁面文件幾乎肯定不連續。所以要把它移到其他盤。要提醒一點,當你移動好頁面文件後,要把原來的刪除掉,系統不會自動刪除。

2)如果有兩個硬碟,把頁面文件放在轉速快的那個,原因上面已講了很多遍了。

3)最大最小頁面文件的設置原則。有很多人建議將這兩個值設置成相等的,我不知道他們是那裡來的依據,其實這樣設置是不合理的。我們先要知道他們兩個值的意義。一般情況下,內存是不會真的「塞滿」,它會在內存儲量到達一定程度時自動將一部分暫時不用的數據放到硬碟,最小頁面文件是所說的「一定程度」的具體比例的決定因素,最小頁面文件大,比例就低,反之則相反;最大頁面文件是極限值,有時你開了很多程序,內存和最小頁面文件都滿了,就自動溢出到最大頁面文件。所以,將兩者設為一樣大是不合理的。最小頁面文件要小一些,這樣能夠在內存中盡可能存更多的數據,效率就高,最大頁面文件大一些,以免出現「全滿」的的情況。

4)winxp現在支持4G內存,哪怕你有5,6百M的內存,你都不需頁面文件了,這時可以把頁面文件禁掉。到注冊表編輯器HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management下,找到DisablePagingExecutive(禁用頁面文件)設其值為1。
5)在同上的注冊表編輯器位置上有個ClearPageFileAtShutdown(關機時清除頁面文件),這里所說的「清除」頁面文件(即虛擬內存)並非是指從硬碟上完全刪除pagefile .sys這個文件,而是對其進行「清洗」和整理,從而為下次啟動Win2K更好地利用虛擬內存作好准備。這樣做還有利於安全,頁面文件上的殘留的數據是可以用特殊的工具讀到的,而這些數據你可能並不想讓人知道。這樣做的代價是關閉系統時間會加長。 將其值設為1即可。

6)學過C的朋友們應該對操作內存有個概念,一個任務完成後,要用free函數來釋放內存,但有很多軟體在設計的時候,並沒有在所有環節都這樣做,這會造成無用的數據占據內存,對這種情況可以使用一些內存優化軟體,讓這鍾軟體來完成釋放內存的動作。

2,下面介紹和優化一些不著名的緩存:

1)內存讀取硬碟數據要經過一個系統緩存(system cache),它的位置是在內存的特定區域,它是用來緩解硬碟與內存之間的速度不平衡的。它是以犧牲內存資源來換取從硬碟讀取數據時的速度的,有了這塊緩存,系統能從硬碟預讀所需的數據,減少系統等待的時間。如果你的內存很大,比如5,6百M,那麼你除了可以採取上面說的關閉頁面文件的方法外,還可以起用打的系統緩存。做法如下,進入注冊表編輯器: HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management,找到LargeSystemCache(啟用大的系統緩存),將它的值設為1就可以了。

這樣設置了後,systemcache從4M增加到8M,再win2000和winxp中,這個值是動態的,如果內存不足,systemcache占據的空間可以自動相應調整。

2)處理器從內存讀取數據的緩存是什麼呢?是二級數據高級緩存(緩沖),同樣它也要在內存中佔一個空間,所以最好是有了大內存之後再設置這個值。也需再注冊表裡設置,方法如下:進入 HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager \Memory Management ,找到 SecondLevelDataCache,默認為256,大內存設為512。

好了經過了上面的介紹,我想對朋友們來說最重要收獲的是加深了對緩存和操作系統的認識,至於優化的方法,我得承認一般的朋友是用不著去做的,當然「玩」一下也是很有意思的。

Ⅸ 如何有效利用瀏覽器本地緩存

資源在瀏覽器端的本地緩存可以通過Expires和Last-Modified返回頭信息進行有效控制。
1)Expires告訴瀏覽器在該指定過期時間前再次訪問同一URL時,直接從本地緩存讀取,無需再向伺服器發起http請求;
優點是:瀏覽器直接讀取緩存信息無需發起http請求。
缺點是:當用戶按F5或Ctl+F5刷新頁面時瀏覽器會再次發起http請求。
2)當伺服器返回設置了Last-Modified頭,下次發起同一URL的請求時,請求頭會自動包含If-Modified-Since頭信息,伺服器對靜態內容會根據該信息跟文件的最後修改時間做比較,如果最後修改時間不大於If-Modified-Since頭信息,則返回304。告訴瀏覽器請求內容未更新可直接使用本地緩存。(注意:只對靜態內容有效,如js/css/image/html等,不包括動態內容,如JSP)
優點:無論用戶行為如何都有效;
缺點:仍需向伺服器發起一次http請求;

對IE來說,本地緩存一般是在這個位置:
C:\Documents and Settings\<user name>\Local Settings\Temporary Internet Files

下面我用一個圖片緩存的例子來說明,如何結合這兩個參數來有效利用本地緩存,例子中圖片存儲在一個分布式文件系統,需要通過特定API才能獲取而非直接存儲在伺服器上靜態文件:

response.setContentType("image/jpeg");

response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "Pragma");
//本地緩存10分鍾過期
response.setDateHeader("Expires", System.currentTimeMillis()+10*60*1000);
//設置Last-Modified
response.setDateHeader("Last-Modified", System.currentTimeMillis());
//判斷請求中的If-Modified-Since頭信息
if(request.getHeader("If-Modified-Since") == null){
//首次訪問或者用戶按Ctl+F5,從文件系統重新讀取圖片
//...get file from dfs
} else {
//返回304,告訴瀏覽器使用本地緩存
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}

這種做法的一個缺點就是假設用戶在第一次圖片下載過程中網路有異常,下載的照片不完整,那用戶在刷新,甚至重啟瀏覽器後還是無法獲取完整的照片,可能會影響極小部分用戶的體驗,雖然可以通過ctl+f5忽略Last-Modified或者清空緩存重新下載照片但是大部分普通用戶可能不了解這些技巧。

參考資料:
http://longrujun.name/index.php/2009/03/04/etag%E5%92%8Cexpires/

Ⅹ 緩存系統中的主要使用的數據結構是什麼

緩存系統中的主要使用的數據結構是memcached。

memcached是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但被許多網站使用。這是一套開放源代碼軟體,以BSD license授權發布。

memcached的API使用三十二比特的循環冗餘校驗(CRC-32)計算鍵值後,將數據分散在不同的機器上。當表格滿了以後,接下來新增的數據會以LRU機制替換掉。

由於memcached通常只是當作緩存系統使用,所以使用memcached的應用程序在寫回較慢的系統時(像是後端的資料庫)需要額外的代碼更新memcached內的數據。

(10)設計本地緩存系統擴展閱讀:

一、存儲方式

為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。

另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)演算法自動刪除不使用的緩存。memcached本身是為緩存而設計的伺服器,因此並沒有過多考慮數據的永久性問題。

二、通信分布式

memcached盡管是「分布式」緩存伺服器,但伺服器端並沒有分布式功能。各個memcached不會互相通信以共享信息。那麼,怎樣進行分布式呢?這完全取決於客戶端的實現。本文也將介紹memcached的分布式。