A. 要自己實現一個緩存,使用LRU演算法,數據結構怎麼設計
要自己實現一個緩存,使用LRU演算法,數據結構怎麼設計
清單 1 顯示了 getBookmark() 過程的一個可能的SOAP請求例子:
清單 1. 一個 SOAP 請求例子
以下是引用片段:
POST /soap HTTP/1.1
Host: localhost
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 471
<?xml version="1.0" encoding="UTF-8"?>
B. 設計一個分布式緩存方案
褲子都拖了,就看這個啊
C. 如何設計一個好的數據本地緩存系統
沒必要重復製造輪子,sqlite就是個不錯的選擇!
D. spring mvc 怎麼設計緩存
用於提供如瀏覽器緩存控制、是否必須有session開啟、支持的請求方法類型(GET、POST等)等,該類主要有如下屬性:
Set<String> supportedMethods:設置支持的請求方法類型,默認支持「GET」、「POST」、「HEAD」,如果我們想支持「PUT」,則可以加入該集合「PUT」。
boolean requireSession = false:是否當前請求必須有session,如果此屬性為true,但當前請求沒有打開session將拋出HttpSessionRequiredException異常;
boolean useExpiresHeader = true:是否使用HTTP1.0協議過期響應頭:如果true則會在響應頭添加:「Expires:」;需要配合cacheSeconds使用;
boolean useCacheControlHeader = true:是否使用HTTP1.1協議的緩存控制響應頭,如果true則會在響應頭添加;需要配合cacheSeconds使用;
boolean useCacheControlNoStore = true:是否使用HTTP 1.1協議的緩存控制響應頭,如果true則會在響應頭添加;需要配合cacheSeconds使用;
private int cacheSeconds = -1:緩存過期時間,正數表示需要緩存,負數表示不做任何事情(也就是說保留上次的緩存設置),
1、cacheSeconds =0時,則將設置如下響應頭數據:
Pragma:no-cache // HTTP 1.0的不緩存響應頭
Expires:1L // useExpiresHeader=true時,HTTP 1.0
Cache-Control :no-cache // useCacheControlHeader=true時,HTTP 1.1
Cache-Control :no-store // useCacheControlNoStore=true時,該設置是防止Firefox緩存
2、cacheSeconds>0時,則將設置如下響應頭數據:
Expires:System.currentTimeMillis() + cacheSeconds * 1000L // useExpiresHeader=true時,HTTP 1.0
Cache-Control :max-age=cacheSeconds // useCacheControlHeader=true時,HTTP 1.1
3、cacheSeconds<0時,則什麼都不設置,即保留上次的緩存設置。
此處簡單說一下以上響應頭的作用,緩存控制已超出本書內容:
HTTP1.0緩存控制響應頭
Pragma:no-cache:表示防止客戶端緩存,需要強制從伺服器獲取最新的數據;
Expires:HTTP1.0響應頭,本地副本緩存過期時間,如果客戶端發現緩存文件沒有過期則不發送請求,HTTP的日期時間必須是格林威治時間(GMT),如「Expires:Wed, 14 Mar 2012 09:38:32 GMT」;
HTTP1.1緩存控制響應頭
Cache-Control :no-cache 強制客戶端每次請求獲取伺服器的最新版本,不經過本地緩存的副本驗證;
Cache-Control :no-store 強制客戶端不保存請求的副本,該設置是防止Firefox緩存
Cache-Control:max-age=[秒] 客戶端副本緩存的最長時間,類似於HTTP1.0的Expires,只是此處是基於請求的相對時間間隔來計算,而非絕對時間。
還有相關緩存控制機制如Last-Modified(最後修改時間驗證,客戶端的上一次請求時間 在 伺服器的最後修改時間 之後,說明伺服器數據沒有發生變化 返回304狀態碼)、ETag(沒有變化時不重新下載數據,返回304)。
該抽象類默認被AbstractController和WebContentInterceptor繼承。
E. Fikker的緩存怎麼設計的
他們的白皮書上寫的很詳細。很長~~ 我給你截一段說明。
2.1. 緩存說明
在 Fikker 系統中,緩存分為智能緩存,強制緩存,拒絕緩存。加速緩存的頁面(html,
asp,aspx,php,jsp,js,css 等)被 gzip 壓縮後以平衡二叉樹的索引結構存放在內
存中,不對硬碟進行任何讀寫(日誌除外)。當加速緩存中的頁面被訪問命中以後,
立即通過壓縮傳輸方式返回給瀏覽器。以上處理方式有如下好處:(1)、不讀寫硬
盤,通過內存進行數據交換會極大的提高頁面相應速度;(2)、將頁面數據經過 gzip
壓縮後存儲,即減少了對內存空間的需求,也會極大的減少數據傳輸量,從整體上
提高響應速度和傳輸效率。
F. L1緩存的數據緩存設計
根據工作原理的不同,目前主流處理器所採用的一級數據緩存又可以分為實數據讀寫緩存和數據代碼指令追蹤緩存2種,它們分別被AMD和Intel所採用。不同的一級數據緩存設計對於二級緩存容量的需求也各不相同,下面讓我們簡單了解一下這兩種一級數據緩存設計的不同之處。 AMD採用的一級緩存設計屬於傳統的「實數據讀寫緩存」設計。基於該架構的一級數據緩存主要用於存儲CPU最先讀取的數據;而更多的讀取數據則分別存儲在二級緩存和系統內存當中。做個簡單的假設,假如處理器需要讀取「AMD ATHLON 64 3000+ IS GOOD」這一串數據(不記空格),那麼首先要被讀取的「AMDATHL」將被存儲在一級數據緩存中,而餘下的「ON643000+ISGOOD」則被分別存儲在二級緩存和系統內存當中(如下圖所示)。
需要注意的是,以上假設只是對AMD處理器一級數據緩存的一個抽象描述,一級數據緩存和二級緩存所能存儲的數據長度完全由緩存容量的大小決定,而絕非以上假設中的幾個位元組。「實數據讀寫緩存」的優點是數據讀取直接快速,但這也需要一級數據緩存具有一定的容量,增加了處理器的製造難度(一級數據緩存的單位製造成本較二級緩存高)。 自P4時代開始,Intel開始採用全新的「數據代碼指令追蹤緩存」設計。基於這種架構的一級數據緩存不再存儲實際的數據,而是存儲這些數據在二級緩存中的指令代碼(即數據在二級緩存中存儲的起始地址)。假設處理器需要讀取「INTEL P4 IS GOOD」這一串數據(不記空格),那麼所有數據將被存儲在二級緩存中,而一級數據代碼指令追蹤緩存需要存儲的僅僅是上述數據的起始地址(如下圖所示)。
由於一級數據緩存不再存儲實際數據,因此「數據代碼指令追蹤緩存」設計能夠極大地降CPU對一級數據緩存容量的要求,降低處理器的生產難度。但這種設計的弊端在於數據讀取效率較「實數據讀寫緩存設計」低,而且對二級緩存容量的依賴性非常大。
G. redis的一個緩存問題,怎樣才能做到設計最優
網頁緩存會對下一次打開這個網頁的速度有所幫助。 IE網頁緩存文件是可以刪除的,那隻是你瀏覽過的網頁的圖片文字等等的一些東西在,刪除下,這樣對你以後瀏覽這個網頁的時候,就不需要再次從伺服器下載圖片等數據,
H. php 緩存如何設計
ob_get_contents, ob_end_clean從實現上應該是ob_get_clean的分解步驟。後者因為從c代碼層面的整合,在僅單次執行時,速度上應該有微量的優勢。因為優勢遠比網路IO的延遲要小,幾乎可以忽略吧。
echo ob_get_contents應該也一般是用於首次生成模板緩存。是內存操作。
include用於直接顯示。是文件操作。
顯示模板可以用後者,做緩存所節約的時間主要是處理計算和各媒介之間的IO上的,根據自己的應用和自己的設備環境在慢的、瓶頸部分作出調整,是靈活的。沒有定式。