A. 系統中IE緩存文件是怎樣產生
瀏覽網站的時候自動創建的,因為有的網站是多次訪問的,所以將網站的內容保存到機器內,會加快多次打開的網站的打開速度,如果你擔心泄露你的個人呢信息,可以設置關閉IE以後自動刪除IE緩存文件,方法如下
打開IE--「工具」菜單--Internet選項--「高級」選項卡
在下面的窗口裡找到「安全」標簽--「關閉瀏覽器時清空Internet臨時文件夾」打上對勾!
重啟IE一下就OK了
B. 在C#中如何創建一個緩存呢高手求解哈!
在2個主程序窗體中調用這個緩存中的用戶名和密碼。這個技術不是緩存,是保存。
用 Session 或者Cookie即可實現。
登錄窗體:session("戶名和密碼") = "輸入的用戶名和密碼";
2個主程序窗體中調用這個用戶名和密碼: a=session("戶名和密碼") ;
C. 瀏覽器緩存的方式和類型(筆記)
瀏覽器緩存只是計算機緩存的一種
1.內存緩存
將數據存到內存
2.代理伺服器緩存
就是個自己找的中介。你拿東西先找中介,中介找房東,房東給中介,中介又給你。比如你需要房子鑰匙,房東把鑰匙放在中介那,你直接從中介那裡拿鑰匙。
3.CDN緩存
將數據存到CDN伺服器。CDN也是個中介,不過這個中介是根據中介的忙碌程度(CDN伺服器忙碌程度)、跟你的距離(CDN伺服器和你的距離)自動給你分配的。
4.瀏覽器緩存( 我是個前端,只關注瀏覽器緩存。 )
根據HTTP協議決定要不要緩存,以什麼方式緩存,緩存到哪(內存還是硬碟等)。
瀏覽器緩存是將瀏覽器請求過的數據(資源文件)保存到電腦上。需要再次使用的時候,直接從電腦上獲取保存的數據(資源文件),這就是瀏覽器緩存
1.減少網路請求,節省流量
2.減輕伺服器壓力
3.資源載入速度快了,前端性能就更好了
1.Server Worker
還沒搞懂,搞懂了再來寫。
2.Memory Cache
內存中的緩存,關閉頁面進程就釋放內存
3.Disk Memory
硬碟中的緩存,不主動清理就一直在
4、Push Cache
推送緩存,是HTTP/2的內容,並沒有嚴格執行HTTP頭部的緩存指令。在Server Worker、Memory Cache、Disk Cache都沒有命中的時候,它會被使用。在Session中存在,Session結束就會被釋放,緩存時間短暫。
1.先去內存查找,找到直接載入
2.內存找不到,硬碟中找,找到直接載入
3.硬碟找不到進行網路請求
4.把請求獲取的資源再緩存到硬碟和內存
1.強緩存
控制強制緩存的欄位分別是Expires和Cache-Control,Cache-Control優先順序比Expires高
-Expires設置一個絕對時間的GMT格式的時間字元串,這個是資源失效時間( 客戶端的時間小於Expires的值,缺陷就是客戶端的時間被改變就有問題 ),在這個時間之前都直接讀取緩存。
-Cache-Control替代Expires,它利用的是相對時間,利用header信息欄位的max-age值判斷。
2.協商緩存
-Last-Modified/If-Modified-Since
Last-Modified:瀏覽器向伺服器發送資源最後的修改時間
If-Modified-Since:當資源過期時,發現響應頭具有Last-Modified聲明,則再次向伺服器請求時帶上頭if-modified-since,表示請求時間。伺服器收到請求後,發現有if-modified-since則與被請求資源的最後修改時間進行對比(Last-Modified),若最後修改時間較新,說明資源又被改過,則返回最新資源,返回200;若最後修改時間較小,說明資源無新修改,返回304 ,使用緩存文件。
缺點:單位是秒,一秒內多次改變會認為沒過期
-ETag/If-None-Match
ETag:由伺服器生成返回給前端,幫助伺服器控制web端的緩存驗證,伺服器會生成並且返回當前資源文件的一個唯一標識
If-None-Match:當資源過期時,發現響應頭具有Etag聲明,則再次向伺服器請求時帶上頭if-none-match(唯一標識Etag值)。伺服器收到該請求後,發現有If-None-Match則根據If-None-Match的欄位值與該資源在伺服器的Etag值做對比,一致則返回304,代表資源無更新,繼續使用緩存文件;不一致則重新返回資源文件,狀態碼為200。
1.強緩存不發請求,協商緩存會發請求給伺服器確認有沒有過期
2.強緩存文件更新瀏覽器不知道,協商緩存更新瀏覽器能實時知道
1.點擊瀏覽器的刷新按鈕時,全部走緩存
2.F5或者滑鼠右鍵刷新強制緩存失效,不影響協商緩存
3.CTRL+F5影響強制緩存和協商緩存都失效
D. yii怎麼生成一個XXX.html的緩存文件
可以用memcache實現緩存組件
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'system.caching.CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
);
三、頁面緩存
頁面緩存指的是緩存整個頁面的內容。頁面緩存可以發生在不同的地方。例如,通過選擇適當的頁面頭,客戶端的瀏
覽器可能會緩存網頁瀏覽有限時間。 Web 應用程序本身也可以在緩存中存儲網頁內容。 在本節中,我們側重於後一
種辦法。
頁面緩存可以被看作是 片段緩存 (/doc/guide/caching.fragment) 一個特殊情況 。 由於網頁內容是往往通過應用布局來生
成,如果我們只是簡單的在布局中調用 beginCache() 和 endCache() ,將無法正常工作。這是因為布局 在
CController::render() 方法里的載入是在頁面內容產生之後。
緩存整個頁面,我們應該跳過產生網頁內容的動作執行。我們可以使用 COutputCache 作為動作 過濾器
( /doc/guide/basics.controller#filter )來完成這一任務。下面的代碼演示如何配置緩存過濾器:
[php] view plainprint?
public function filters()
{
return array(
array(
'system.web.widgets.COutputCache',
'ration'=>100,
'varyByParam'=>array('id'),
),
);
}
上述過濾器配置會使過濾器適用於控制器中的所有行動。我們可能會限制它在一個或幾個行動通過使用插件操作器。
更多的細節中可以看過濾器( /doc/guide/basics.controller#filter ) 。
提示 : 我們可以使用 COutputCache 作為一個過濾器 , 因為它從 CFilterWidget 繼承過來 , 這意味著它是一個工具 (widget)
和一個過濾器。事實上, widge 的工作方式和過濾器非常相似:工具 widget ( 過濾器 filter) 是在 action 動作里的內容執
行前執行,在執行後結束。
E. 微信緩存是怎麼產生的
微信在正常使用過程中會產生緩存,騰訊手機管家支持刪除QQ和微信的緩存垃圾,文字和語音聊天記錄暫不支持直接刪除。微信過程中的圖片記錄,可以登錄手機管家--清理加速--右上角手機瘦身--微信文件進行選擇性的刪除。
F. 緩存-redis 三種模式搭建和運行原理
標簽: redis 緩存 主從 哨兵 集群
本文簡單的介紹redis三種模式在linux的安裝部署和數據存儲的總結,希望可以相互交流相互提升。
對於Centos7在安裝redis之前需要進行一些常用工具的安裝:
關閉防火牆
正式安裝redis
在redis進行maketest時候會出現一系列的異常,有如下解決方案:
用redis-server啟動一下redis,做一些實驗沒什麼意義。
要把redis作為一個系統的daemon進程去運行的,每次系統啟動,redis進程一起啟動,操作不走如下:
RDB和AOF是redis的一種數據持久化的機制。 持久化 是為了避免系統在發生災難性的系統故障時導致的系統數據丟失。我們一般會將數據存放在本地磁碟,還會定期的將數據上傳到雲伺服器。
RDB 是redis的snapshotting,通過redis.conf中的save配置進行設置,如 save 60 1000:
AOF 是以appendonly方式進行數據的儲存的,開啟AOF模式後,所有存進redis內存的數據都會進入os cache中,然後默認1秒執行一次fsync寫入追加到appendonly.aof文件中。一般我們配置redis.conf中的一下指令:
AOF和RDB模式我們一般在生產環境都會打開,一般而言,redis服務掛掉後進行重啟會優先家在aof中的文件。
當啟動一個slave node的時候,它會發送一個PSYNC命令給master node,如果這是slave node重新連接master node,那麼master node僅僅會復制給slave部分缺少的數據;否則如果是slave node第一次連接master node,那麼會觸發一次full resynchronization;
開始full resynchronization的時候,master會啟動一個後台線程,開始生成一份RDB快照文件,同時還會將從客戶端收到的所有寫命令緩存在內存中。RDB文件生成完畢之後,master會將這個RDB發送給slave,slave會先寫入本地磁碟,然後再從本地磁碟載入到內存中。然後master會將內存中緩存的寫命令發送給slave,slave也會同步這些數據。
slave node如果跟master node有網路故障,斷開了連接,會自動重連。master如果發現有多個slave node都來重新連接,僅僅會啟動一個rdb save操作,用一份數據服務所有slave node。
從redis 2.8開始,就支持主從復制的斷點續傳,如果主從復制過程中,網路連接斷掉了,那麼可以接著上次復制的地方,繼續復制下去,而不是從頭開始復制一份。
master node會在內存中常見一個backlog,master和slave都會保存一個replica offset還有一個master id,offset就是保存在backlog中的。如果master和slave網路連接斷掉了,slave會讓master從上次的replica offset開始繼續復制,但是如果沒有找到對應的offset,那麼就會執行一次resynchronization。
master在內存中直接創建rdb,然後發送給slave,不會在自己本地落地磁碟了,可以有如下配置:
slave不會過期key,只會等待master過期key。如果master過期了一個key,或者通過LRU淘汰了一個key,那麼會模擬一條del命令發送給slave。
在redis.conf配置文件中,上面的參數代表至少需要3個slaves節點與master節點進行連接,並且master和每個slave的數據同步延遲不能超過10秒。一旦上面的設定沒有匹配上,則master不在提供相應的服務。
sdown達成的條件很簡單,如果一個哨兵ping一個master,超過了 is-master-down-after-milliseconds 指定的毫秒數之後,就主觀認為master宕機
sdown到odown轉換的條件很簡單,如果一個哨兵在指定時間內,收到了 quorum 指定數量的其他哨兵也認為那個master是sdown了,那麼就認為是odown了,客觀認為master宕機
如果一個slave跟master斷開連接已經超過了down-after-milliseconds的10倍,外加master宕機的時長,那麼slave就被認為不適合選舉為master
(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state
每次一個哨兵要做主備切換,首先需要quorum數量的哨兵認為odown,然後選舉出一個slave來做切換,這個slave還得得到majority哨兵的授權,才能正式執行切換;
(2)SENTINEL RESET *,在所有sentinal上執行,清理所有的master狀態
(3)SENTINEL MASTER mastername,在所有sentinal上執行,查看所有sentinal對數量是否達成了一致
4.3.2 slave的永久下線
讓master摘除某個已經下線的slave:SENTINEL RESET mastername,在所有的哨兵上面執行.
redis的集群模式為了解決系統的橫向擴展以及海量數據的存儲問題,如果你的數據量很大,那麼就可以用redis cluster。
redis cluster可以支撐N個redis master,一個master上面可以掛載多個slave,一般情況我門掛載一個到兩個slave,master在掛掉以後會主動切換到slave上面,或者當一個master上面的slave都掛掉後,集群會從其他master上面找到冗餘的slave掛載到這個master上面,達到了系統的高可用性。
2.1 redis cluster的重要配置
2.2 在三台機器上啟動6個redis實例
將上面的配置文件,在/etc/redis下放6個,分別為: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf
每個啟動腳本內,都修改對應的埠號
2.3 創建集群
解決辦法是 先安裝rvm,再把ruby版本提升至2.3.3
使用redis-trib.rb命令創建集群
--replicas: 表示每個master有幾個slave
redis-trib.rb check 192.168.31.187:7001 查看狀體
3.1 加入新master
以上相同配置完成後,設置啟動腳本進行啟動;然後用如下命令進行node節點添加:
3.2 reshard一些數據過去
3.3 添加node作為slave
3.4 刪除node