1. 程式人生 > >第一章 常用的快取技術

第一章 常用的快取技術

1、常見的兩種快取

  • 本地快取:不需要序列化,速度快,快取的數量與大小受限於本機記憶體
  • 分散式快取:需要序列化,速度相較於本地快取較慢,但是理論上快取的數量與大小無限(因為快取機器可以不斷擴充套件)

2、本地快取

  • Google guava cache:當下最好用的本地快取
  • Ehcache:spring預設整合的一個快取,以spring cache的底層快取實現類形式去操作快取的話,非常方便,但是欠缺靈活,如果想要靈活使用,還是要單獨使用Ehcache
  • Oscache:最經典簡單的頁面快取

3、分散式快取

  • memcached:分散式快取的標配
  • Redis:新一代的分散式快取,有替代memcached的趨勢

3.1、memcached

  • 經典的一致性hash演算法
  • 基於slab的記憶體模型有效防止記憶體碎片的產生(但同時也需要估計好啟動引數,否則會浪費很多的記憶體)
  • 叢集中機器之間互不通訊(相較於Jboss cache等叢集中機器之間的相互通訊的快取,速度更快<--因為少了同步更新快取的開銷,且更適合於大型分散式系統中使用)
  • 使用方便(這一點是相較於Redis在構建客戶端的時候而言的,儘管redis的使用也不困難)
  • 很專一(專做快取,這一點也是相較於Redis而言的)

3.2、Redis

  • 可以儲存複雜的資料結構(5種)
    • strings-->即簡單的key-value,就是memcached可以儲存的唯一的一種形式,接下來的四種是memcached不能直接儲存的四種格式(當然理論上可以先將下面的一些資料結構中的東西封裝成物件,然後存入memcached,但是不推薦將大物件存入memcached,因為memcached的單一value的最大儲存為1M,可能即使採用了壓縮演算法也不夠,即使夠,可能存取的效率也不高,而redis的value最大為1G)
    • hashs-->看做hashTable
    • lists-->看做LinkedList
    • sets-->看做hashSet,事實上底層是一個hashTable
    • sorted sets-->底層是一個skipList
  • 有兩種方式可以對快取資料進行持久化
    • RDB
    • AOF
  • 事件排程
  • 釋出訂閱等

4、整合快取

專指spring cache,spring cache自己繼承了ehcache作為了快取的實現類,我們也可以使用guava cache、memcached、redis自己來實現spring cache的底層。當然,spring cache可以根據實現類來將快取存在本地還是存在遠端機器上。

5、頁面快取

在使用jsp的時候,我們會將一些複雜的頁面使用Oscache進行頁面快取,使用非常簡單,就是幾個標籤的事兒;但是,現在一般的企業,前臺都會使用velocity、freemaker這兩種模板引擎,本身速度就已經很快了,頁面快取使用的也就很少了。

總結:

  • 在實際生產中,我們通常會使用guava cache做本地快取+redis做分散式快取+spring cache就整合快取(底層使用redis來實現)的形式
  • guava cache使用在更快的獲取快取資料,同時快取的資料量並不大的情況
  • spring cache整合快取是為了簡單便捷的去使用快取(以註解的方式即可),使用redis做其實現類是為了可以存更多的資料在機器上
  • redis快取單獨使用是為了彌補spring cache整合快取的不靈活
  • 就我個人而言,如果需要使用分散式快取,那麼首先redis是必選的,因為在實際開發中,我們會快取各種各樣的資料型別,在使用了redis的同時,memcached就完全可以捨棄了,但是現在還有很多公司在同時使用memcached和redis兩種快取。

在本系列接下來的介紹中,會介紹在分散式情況下guava cache、memcached、redis、spring cache的使用與原理。

疑問:

  • memcached相較於redis而言,有什麼優點?(如果有大神瞭解這一塊,請指點一下)

相關推薦

第一 常用快取技術

1、常見的兩種快取 本地快取:不需要序列化,速度快,快取的數量與大小受限於本機記憶體 分散式快取:需要序列化,速度相較於本地快取較慢,但是理論上快取的數量與大小無限(因為快取機器可以不斷擴充套件) 2、本地快取 Google guava cache:當下最好用的本地快取 Ehcache:

常用快取技術

這是使用快取最頻繁最直接的方式,即我們把需要頻繁訪問DB的資料載入到記憶體裡面,以提高響應速度。通常我們的做法是使用一個ConcuccrentHashMap<Request, AtomicInteger>來記錄一天當中每個請求的次數,每天凌晨取出昨天訪問最頻繁的K個請求(K取多少個取決你

第一滲透測試技術技術基礎

  滲透測試時一種通過模擬攻擊者的技術與方法,挫敗目標系統的安全控制措施並取得訪問控制權限的安全測試方式。 滲透測試階段   1.前期互動階段     確定滲透測試的目標與範圍   2.情報蒐集階段     採取各種可能的方法蒐集將要攻擊客戶組織的所有資訊。   3.威脅建模階段  

第一 常用命令 scp

上傳文件 方式 msg code 遠程拷貝 文件夾 文件拷貝 copy 需要 1 scp scp:secure copy,是用來進行遠程文件拷貝的.數據傳輸使用ssh1,並且和ssh1使用相同的認證方式,提供相同的安全保證.與rcp不同的是,scp會要求你輸入密碼如果需要的

簡談常用快取技術

對於一個訪問量龐大的網站來說,快取機制是很重要的提速和優化手段。 那麼我們在開發一個網站的過程中,能用到的,需要注意的快取機制都有哪些呢?本文將淺顯層面做一些簡單筆記。如果大家有不同意見,歡迎拍磚。 本文主要提到如下快取技術:瀏覽器快取、閘道器/代理伺服器快取、頁面快取、資

五分鐘學後端技術:如何學習Redis、memcache等常用快取技術

原創宣告 本文作者:黃小斜 轉載請務必在文章開頭註明出處和作者。 本文思維導圖 什麼是快取 計算機中的快取 做後端開發的同學,想必對快取都不會陌生了,平時我們可能會使用Redis,MemCache這類快取元件,或者是本地快取,來實現一些後端的應用。 那麼,嚴格來說,到底什麼才是快取呢,先來看看百度百科的定

記憶體池——第一 幾種常用的記憶體池技術

#define EXTRA_BUFFER_SIZE        64 namespace easy {     template<class _Type,class _Alloc >     class EasyRingbuffer      {   

《現代前端技術解析》第一讀書筆記(未完成)

服務 異步 網絡請求 會話 開始 註冊 復雜 技術 顯示   今天是2017年6月26日,星期一,開始從第一章看起。第一章主要講的是前端技術的發展概況以及一些必須掌握的瀏覽器基礎知識與常用開發技術。   頁面內容多而復雜,為了保證開發效率,我們可以借助符合特定場景的前端框架

使用JSP/Server技術開發新聞發布系統第一動態網頁開發基礎

安裝 含義 etom 端口號 ron 內容 升級維護 apach 管理工具 一:為什麽需要動態網頁 由於靜態網頁的內容是固定的,不能提供個性化和定制化得服務,使用動態網頁可真正地與用戶實現互動。 二:什麽是動態網頁 ①:動態網頁是指在服務器端運行的,使

.NET技術基礎總結 ----第一

操作 訪問 數學 類型轉換 編程語言 類庫 foreach wid net                               . 一、.NET定義   很多人常說我是做.NET開發的,但是,NET到底是什麽呢?是一個開發工具?還是一個平臺?或者是一個軟件環境? 其

《MySQL技術內幕InnoDB存儲引擎》讀書筆記 第一

內存 ndb存儲 mvcc select mysql5.0 事務 myisam 包括 插入 Mysql體系結構和存儲引擎 1.1 定義數據庫和實例   數據庫:物理操作系統文件或其他形式文件類型的集合。 數據庫文件可以使frm,MYD,MYI,ibd結尾的文件。   

深入分析JavaWeb技術內幕》 第一 深入Web請求過程

oot 沒有 目標 com slb 別名 AC 技術 提供服務 第一章 深入Web請求過程 B/S兩方面好處: 客戶端使用統一的瀏覽器(Browser)。瀏覽器統一性,屏蔽了不同服務器提供商提供服務的差異性。並且,瀏覽器交互特性使瀏覽器使用方便,且用戶行為的可繼承性非常強

《惡意程式碼分析實戰》--第一:靜態分析基礎技術

**請參考大神的連結:https://blog.csdn.net/baidu_41108490/article/details/80298973#commentBox Lab1-1 這裡我只是記錄我的學習過程** 2、用PEtools開啟,檢視日期 .exe .dll

讀大型網站技術架構---第一篇---第一---架構演化過程

最近開始讀此書,主要為了增加自己知識的廣度,首要目的是即使自己沒有參與過此類專案,但是也能知道在某些場景或者某些架構處理時應該往哪些方向思考。 大型網站系統特點 1.高併發,大流量 2.高可用 3.海量資料 4.使用者分佈廣泛,網路情況複雜 5.安全環境惡劣 6.需求

第一行程式碼--第九-使用網路技術

這一章的內容主要有使用WebView展示網頁,使用HTTP協議訪問網路,解析xml資料以及解析json資料,下面是我自己的總結: WebView 在應用程式裡展示網頁 簡單用法 WebView webview=(Webview)findViewById(R.id.web

第一行程式碼Android》學習總結第三 常用控制元件使用方法

1、TextView match_parent:表示讓父佈局決定當前控制元件大小,當前控制元件大小與父佈局大小一樣。 wrap_content:表示讓空間內容決定當前控制元件大小讓當前控制元件大小能夠剛好包含住控制元件內的內容。         對控

《java常用演算法手冊》 第一 演算法概述

             四種表現形式:                  

Java EE入門教程系列第一Java EE的概述(二)——Java EE技術框架和開發工具

1.3Java EE的技術框架 從技術的角度劃分,完整的Java EE分成了4個部分:元件技術、服務技術、通訊技術和架構技術。 下面給出的是一個適合初學者的體系結構簡化圖,暫時接觸不到的部分統一用“支援技術”表示,我們暫時只專注於與應用級開發相關的技術即可。 1.元件技術 這是

麒麟KY-RTI分佈模擬技術第一 簡介

第一章 簡介        高層體系結構(High Level Architecture,HLA)是美國國防部為了解決美軍在各個領域開發出來的多種模型和各類模擬系統的互聯和互操作問題而提出的一種分散式模擬標準,而按照HLA介面規範實現的

《微機原理與介面技術第一——微機原理概述

雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 目錄 第1節  基本術語 第2節