第一章 經常使用的緩存技術

一、常見的兩種緩存redis

  • 本地緩存:不須要序列化,速度快,緩存的數量與大小受限於本機內存
  • 分佈式緩存:須要序列化,速度相較於本地緩存較慢,可是理論上緩存的數量與大小無限(由於緩存機器能夠不斷擴展)

二、本地緩存算法

  • Google guava cache:當下最好用的本地緩存
  • Ehcache:spring默認集成的一個緩存,以spring cache的底層緩存實現類形式去操做緩存的話,很是方便,可是欠缺靈活,若是想要靈活使用,仍是要單獨使用Ehcache
  • Oscache:最經典簡單的頁面緩存

三、分佈式緩存spring

  • memcached:分佈式緩存的標配
  • Redis:新一代的分佈式緩存,有替代memcached的趨勢

3.一、memcached緩存

  • 經典的一致性hash算法
  • 基於slab的內存模型有效防止內存碎片的產生(但同時也須要估計好啓動參數,不然會浪費不少的內存)
  • 集羣中機器之間互不通訊(相較於Jboss cache等集羣中機器之間的相互通訊的緩存,速度更快<--由於少了同步更新緩存的開銷,且更適合於大型分佈式系統中使用)
  • 使用方便(這一點是相較於Redis在構建客戶端的時候而言的,儘管redis的使用也不困難)
  • 很專注(專作緩存,這一點也是相較於Redis而言的)

3.二、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
  • 事件調度
  • 發佈訂閱等

四、集成緩存jsp

專指spring cache,spring cache本身繼承了ehcache做爲了緩存的實現類,咱們也可使用guava cache、memcached、redis本身來實現spring cache的底層。固然,spring cache能夠根據實現類來將緩存存在本地仍是存在遠程機器上。分佈式

五、頁面緩存memcached

在使用jsp的時候,咱們會將一些複雜的頁面使用Oscache進行頁面緩存,使用很是簡單,就是幾個標籤的事兒;可是,如今通常的企業,前臺都會使用velocity、freemaker這兩種模板引擎,自己速度就已經很快了,頁面緩存使用的也就不多了。spa

 

總結:對象

  • 在實際生產中,咱們一般會使用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而言,有什麼優勢?(若是有大神瞭解這一塊,請指點一下)
相關文章
相關標籤/搜索