緩存機制

緩存 緩存就是數據交換的緩沖區(稱作Cache)

客戶端:緩存(expires)、deflate壓縮
緩存服務器:CDN/cache緩存靜態內容如:html、jpg、gif、js等
靜態web服務器:Apache/nginx靜態服務器提供html頁面內容
php、java 服務器:PHP/JAVA動態內容
數據庫緩存服務器:數據庫緩存memcache/redis
數據庫服務器:MYSQL數據庫
數據存儲:NFS/HADOOP等

?

緩存工作的原則,就是 “引用的局部性”,這可以分為時間局部性和空間局部性。

CPU 緩存、網絡緩存、磁盤緩存、數據緩存、WEB緩存等。

web 應用緩存場景 ?

訪問一個地址 從瀏覽器緩存 路由緩存 DNS緩存 遞歸搜索 web緩存 數據緩存

一、HTTP 緩存:

1、HTTP 協議 超文本傳輸協議?

HTTP 報文就是瀏覽器和服務器間通信時發送及響應的數據塊。
瀏覽器向服務器請求數據,發送請求(request)報文;服務器向瀏覽器返回數據,返回響應(response)報文。
報文信息主要分為兩部分:
  A、包含屬性的首部(header) 附加信息(cookie,緩存信息等)與緩存相關的規則信息,均包含在header中;
  B、包含數據的主體部分(body) HTTP請求真正想要傳輸的部分;

HTTP 緩存有多種規則,Expires ;通過web 服務器實現緩存機制。

Apache 緩存

mod_cache 模塊

Apache?的緩存方式也有兩種,一種是基于硬盤文件的緩存,由?mod_disk_cache?實現,另一種是使用內存緩存,由?mod_mem_cache?實現。URL?的請求方式必須是?GET?方式。

  基于硬盤文件存儲的緩存 :

<IfModule mod_cache.c>CacheDefaultExpire 86400<IfModule mod_disk_cache.c>CacheEnable disk /tmp/fileCacheRoot /tmp/apacheCacheCacheDirLevels 5CacheDirLength 4CacheMaxFileSize 1048576CacheMinFileSize 10</IfModule>
</IfModule>

CacheDefaultExpire:設定緩存過期的時間(秒),默認是1小時,只有當緩存的文檔沒有設置過期時間或最后修改時間時這個指令才會生效.
CacheEnable:啟用緩存,第1個參數是緩存類弄,這里當然是?disk了,第2個參數是緩存路徑,指的是?url?路徑,這里是緩存所有的東西.
CacheRoot:緩存文件所在的目錄,運行?Apache?的用戶(如daemon?或?nobody)要能對其進行讀寫,如果不清楚的話可以直接設置成?777,請手動建立該目錄并設置好訪問權限
CacheDirLevels:緩存目錄的深度,默認是3,這里設置為5
CacheDirLength:緩存目錄名的字符長度,默認是4,這里設置為5
CacheMaxFileSize?和?CacheMaxFileSize: 緩存文件的最大值和最小值(byte),當超過這個范圍時將不再緩存,這里設置為?1M?和?10bytes

  基于內存的緩存

<IfModule mod_cache.c><IfModule mod_mem_cache.c>CacheEnable mem /MCacheMaxObjectCount 20000MCacheMaxObjectSize 1048576MCacheMaxStreamingBuffer 65536MCacheMinObjectSize 10MCacheRemovalAlgorithm GDSFMCacheSize 131072</IfModule>
</IfModule>

CacheEnable:啟用緩存,使用基于內存的方式存儲
MCacheMaxObjectCount:在內存中最多能存儲緩存對象的個數,默認是1009,這里設置為20000
MCacheMaxObjectSize:單個緩存對象最大為?1M,默認是10000bytes
MCacheMaxStreamingBuffer:在緩沖區最多能夠放置多少的將要被緩存對象的尺寸,這里設置為?65536,該值通常小于100000或?MCacheMaxObjectSize?設置的值
MCacheMinObjectSize:單個緩存對象最小為10bytes,默認為1bytes
MCacheRemovalAlgorithm:清除緩存所使用的算法,默認是?GDSF,還有一個是LRU,可參考?Apache?的官方文檔。
MCacheSize:緩存數據最多能使用的內存,單位是?kb,默認是100kb,這里設置為128M

Nginx 調優 配置cache 緩存 ?常見的 304 狀態

proxy_temp_path  /tmp/proxy_temp_dir;//  設置緩存位置
proxy_cache_path /tmp/proxy_cache_dir   levels = 1:2 keys_zone = cache_one:200m inactive =1d    max_size =30g;//  設置緩存區名稱  內存緩存空間大小  1天內容沒有訪問自動清除 緩存設置大小 ;

Tomcat性能調優

開啟壓縮功能
compression="on"

通過ExpiresFilter設置資源緩存,可通過Expires?與?Cache-Control?控制資源何時過期。

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletResponse res = (HttpServletResponse) response;  res.setHeader("Cache-Control", "max-age=10");                   // 第一次請求10s后過期}

二、應用場景方式緩存分類有三大類

  A、數據庫緩存

  B、靜態緩存

  C、動態緩存

一、數據庫緩存:

  1、MongoDB:是文檔型的非關系型數據庫,使用bson結構。其優勢在于查詢功能比較強大,能存儲海量數據,缺點是比較消耗內存。使用os mmap機制緩存數據文件 所以會耗盡系統資源所有內存。

方案:集群多副本集;

應用:一般用來存放評論等半結構化數據,支持二級索引。 適合存儲json類型數據,不經常變化。用于對象及JSON數據的存儲:Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。

場景: 資訊 新聞;

  2、Redis:內存 緩存技術 主要規則是 key-value存儲系統;支持備份;還支持list,set,sorted set,hash 等眾多數據結構。Redis使用單線程的IO復用模型,和Memcached類似,但它支持存儲的value類型相對更多支持不同的排序 算法;可以將內存中的數據保持在磁盤中。

方案:一般主從模式,3.0之后集群哨兵模式;或者twemproxy部署簡單快捷;可以直接在proxy進行讀寫、并轉發請求給后端的redis;但是不適合超大流量系統。

應用:適合小數據文件 當數據不能剔除,數據需要落地時,redis更合適 類似用戶信息文件;

  3、Memcache:都是基于內存緩存技術 關系型數據緩存。

方案:也是分布式集群

原理:Memcached是多線程,非阻塞IO復用的網絡模型,分為監聽主線程和worker子線程,Memcached 用一致性哈希環的方式,在客戶端計算出分布位置。

應用:memacached基本上只支持kv存儲,不支持枚舉,持久化和復制等功能;

場景:視頻信息資料 100K大數據文件;內存利用率比較高。

  4、消息隊列?

?

二、靜態緩存

1、客戶端緩存

瀏覽器緩存,也就是客戶端緩存;一般是在 web 服務器上配置;

  應用:

a、常見的nginx 的 expires 設置一個時間緩存;請求常見的 304 狀態;請求未改動。

b、jsp 文件html 標簽 expires

?

3、服務器端的靜態緩存

服務器端也是主要分為磁盤緩存和內存緩存兩大類;

1、Squid

squid 代理服務器;?

場景應用:緩存靜態頁面和html 文件 圖片 流媒體 等 ;(一般會禁止CGI 緩存)會緩存到內存和硬盤中;

a、透明代理 也是正向代理 不需要設置客戶端 只設置網關服務器設置;

b、反向代理 結合智能DNS 實現的基本的CDN( 內容分發網絡)框架;

squid 主要負責提供緩存加速以及訪問控制;正向代理是對用戶的一種代理操作。正向代理緩存 應用內部網絡希望訪問外部網絡時緩存頁面數據。

2、Varnish
varish是以內存作為共享容器的:內存緩存;內存的大小決定了它的緩存容量。相對于主要以硬盤為存儲的squid來說要高效的多。它適合一些經常查詢且變化不大的靜態內容緩存。

Varnish與一般服務器軟件類似,分為master(management)進程和child(worker,主要做cache的工作)進程;master進程讀入命令,進行一些初始化,然后fork并監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。

3、CDN ?內容分發網絡

盡可能的避開互聯網上有可能影響數據傳輸的速度和穩定性的環節和瓶頸,導向離客戶最近的服務點。解決網絡擁擠,提高響應速度。

CDN 是屬于靜態緩存加速。

CDN 是基于傳統 nginx、squid、varnish 等 web 緩存技術,結合 DNS 智能解析的靜態緩存加速技術。

CDN 的靜態緩存技術核心主要在于兩點:

節點緩存:對需要加速的網站應用,相應的靜態資源通過內存緩存+磁盤緩存的方式緩存在服務器端。

精準調度:對訪問的用戶 ip 進行智能解析調度,實現就近緩存節點訪問。

4、數據庫 mysql 一主多從或者多主多從。

5、磁盤存儲;raid ;分布式文件系統 nfs mfs hadoop dhfs

?

三、緩存 回收策略機制

1、基于空間
達到一定存儲空間 按照策略移除數據。

2、基于容量
緩存條目限制 超過將舊的數據移除

3、基于時間
TTL 活存期限 設置一個時間段
TTI 空閑期 數據多久沒有沒有訪問將從緩存中移除。

轉載于:https://www.cnblogs.com/sharesdk/p/9305793.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell學習總結

Shell 是什么&#xff1f; Shell 是一個用C語言編寫的程序&#xff0c;它是用戶使用Linux的橋梁。Shell既是一種命令語言&#xff0c;又是一種程序設計語言。 Shell 是指一種應用程序&#xff0c;這個應用程序提供了一個界面&#xff0c;用戶通過這個界面訪問操作系統內核的服務…

java有幾個關鍵字,Java多線程常用的幾個關鍵字

Java多線程常用的幾個關鍵字二、volatile作用&#xff1a;volatile關鍵字的作用是&#xff1a;使變量在多個線程間可見(具有可見性)&#xff0c;但是僅靠volatile是不能保證線程的安全性&#xff0c;volatile關鍵字不具備synchronized關鍵字的原子性。Demo1:package com.ietree…

PHP獲取QQ等級,php仿QQ等級太陽顯示函數

開頭先引述下QQ等級的算法&#xff1a;設當前等級為N&#xff0c;達到當前等級最少需要的活躍天數為D&#xff0c;當前活躍天數為Dc&#xff0c;升級剩余天數為Dr&#xff0c;則&#xff1a;從而推出:好了&#xff0c;引述完成&#xff0c;懶得寫字了&#xff0c;貼出代碼&…

Bugfree實用心得_轉

轉自&#xff1a;http://blog.csdn.net/benkaoya/article/details/8719257 本博下有許多實用技巧 1. 什么是問題跟蹤系統 問題跟蹤系統&#xff08;Issue Tracking System&#xff09;是專門用于記錄、跟蹤和管理各類問題的軟件。 問題跟蹤系統出現于上世紀80年代&#xff0c;…

【qxbt day1】 P2367 語文成績

今天學了 差分********* 很明白 然后 配合著luogu上的題寫一下吧 裸的差分 當時一直打暴力60分 交了十幾次 今天才知道 查詢修改什么的是差分 直接看題把 輸入輸出格式輸入格式&#xff1a; 第一行有兩個整數n&#xff0c;p&#xff0c;代表學生數與增加分數的次…

python會什么比c慢

眾所周知&#xff0c;python執行速度比c慢。原因為何&#xff1f; 先來看下面這張圖&#xff1a; python的傳統運行執行模式&#xff1a;錄入的源代碼轉換為字節碼&#xff0c;之后字節碼在python虛擬機中運行。代碼自動被編譯&#xff0c;之后再解釋成機器碼在CPU中執行。 補充…

多維動歸第一題

https://www.luogu.org/problemnew/show/P1508 好了這題就是較為簡單的坐標類DP&#xff08;感覺&#xff09;&#xff0c;總之是一個二維的區域&#xff0c;需要一步一步地向可前進方向dp&#xff0c;而倒退過來&#xff0c;就是每一個地方取之前的地方里最多的一個進行選擇&a…

Json字符串處理

2019獨角獸企業重金招聘Python工程師標準>>> pom.xml <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.7</version> </dependency> 編寫GsonUtils類 // // Source c…

用腳本控制虛擬機

#############用腳本控制虛擬機給file.sh 一個權限chmod x file.sh轉載于:https://blog.51cto.com/forever8/1863587

HDU 5288

//枚舉因子&#xff0c;查找和i最近的左右是i因子的點即可。#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define LL long long using namespace std;const int MAX100010; const LL mod1e97; int l_next[10010];…

Git 初步學習

學習目標&#xff1a; 在linux 上安裝Git 服務器 在windows 上安裝 Git 客戶端 創建Git倉庫&#xff0c;git用戶 在windows 中獲取項目&#xff0c;對項目進行增刪改查&#xff0c;更新到服務器 創建兩個分支&#xff0c;進行分支修改和代碼合并 1. 在linux上安裝git服務器 使用…

CRTMPServer 在CentOS 64-bit下的編譯(轉)

CRTMPServer 在CentOS 64-bit下的編譯 http://blog.csdn.net/qiuchangyong/article/details/52848942 一、Centos 用 wget 下載需要的軟件 wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz 二、安裝 cmake tar zxvf cmake-2.8.4.tar.gzcd cmake-2.8.6./bootstrapgma…

HTML 學習筆記 day one

HTML學習筆記 day one Chapter one 網站開發基礎 1.2網站的基本架構 網站的基本要素&#xff1a;內容&#xff0c;頁面&#xff0c;超鏈接 動態網頁和靜態網頁的區別在于&#xff1a;動態網頁會自動更新&#xff0c;后綴名是.asp或者.aspx;而靜態網頁不會自動更新&#xff0c…

Jquery事件冒泡

事件冒泡 什么是事件冒泡 在一個對象上觸發某類事件&#xff08;比如單擊onclick事件&#xff09;&#xff0c;如果此對象定義了此事件的處理程序&#xff0c;那么此事件就會調用這個處理程序&#xff0c;如果沒有定義此事件處理程序或者事件返回true&#xff0c;那么這個事件會…

WPF對某控件添加右鍵屬性

代碼創建右鍵屬性 ContextMenu cm new ContextMenu();MenuItem mi new MenuItem();mi.Header "打開此文件所有文件夾";mi.Click mi_Click;cm.Items.Add(mi);lv.ContextMenu cm; 轉載于:https://www.cnblogs.com/lunawzh/p/5986356.html

解決虛擬機 正在決定eht0 的ip信息失敗 無鏈接-- 添加虛擬網卡

添加步驟&#xff1a;1、進入設備管理器 2、點下一步3、繼續下一步4、繼續往下走轉載于:https://www.cnblogs.com/Yongzhouunknown/p/4802530.html

jquery元素節點操作

jquery元素節點操作 創建節點 var $div $(<div>); var $div2 $(<div>這是一個div元素</div>); 插入節點 1、append()和appendTo()&#xff1a;在現存元素的內部&#xff0c;從后面插入元素 var $span $(<span>這是一個span元素</span>); $(#d…

8位二進制補碼表示整數的最小值是什么,最大值是什么

最大127,最小 -128補碼表示的數,是沒有正負0的,因此除了最高位的符號位以外,可以表示的數最大為 127,因此最大為 127 而因為 10000000,并不是表示為 -0 因此人家用 1000000表示 -128轉載于:https://www.cnblogs.com/huenchao/p/5988288.html

使用 Arduino 和 LM35 溫度傳感器監測溫度

上一篇玩兒了一下Arduino入門&#xff0c;這次再進一步&#xff0c;用一下LM35溫度傳感器來監測當前溫度。LM35溫度傳感器已經在Arduino入門套件里包含了&#xff0c;就是那個有三個腳的小黑塊兒。 我們先把這些東西連起來。把傳感器查在面包板上&#xff0c;然后按照下面的示意…

快照是什么?揭秘存儲快照的實現

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 本文由許登博 發表于云社區專欄 原創聲明&#xff1a;本文首發騰訊云云社區&#xff0c;未經允許&#xff0c;不得轉載 前言 存儲網絡行業協會SNIA&#xff08;StorageNetworking Industry Association&…