1、應用緩存(本地緩存)java
本地緩存做用就是提升系統的運行速度,是一種空間換時間的取捨。它實質上是一個作key-value查詢的字典。 redis
分類:mongodb
1. java jdk map/ConcurrentMap數據庫
適用場景:數據量小,數據沒有失效時間要求緩存
jdk map侷限性:網絡
2. ehcache數據結構
ehcache有集羣的功能,可是ehcache仍是適合一些簡單的應用緩存,好比方法級別的,緩存方法的返回值。或者看成一個Map來存儲不禁GC管理的、能夠持久化的數據,好比爬蟲url的存儲。併發
ehcache對併發的支持框架
在高併發的狀況下,使用Ehcache緩存時,因爲併發的讀與寫,咱們讀的數據有多是錯誤的,咱們寫的數據也有可能意外的被覆蓋。所幸的是Ehcache爲咱們提供了針對於緩存元素Key的Read(讀)、Write(寫)鎖。當一個線程獲取了某一Key的Read鎖以後,其它線程獲取針對於同一個Key的Read鎖不會受到限制,但其它線程(包括獲取了該Key的Read鎖的線程)若是想獲取針對同一個Key的Write鎖就不行,它須要等到針對於該Key的Read鎖釋放後才能獲取其Write鎖;當一個線程獲取了某一Key的Write鎖以後,其它線程獲取同一個Key的Read鎖或者Write鎖的請求將等待針對於該Key的Write鎖釋放後才能繼續進行,可是同一個線程獲取該Key對應的Read鎖或者Write鎖將不須要等待。獲取了對應的鎖以後,記得在再也不須要該鎖後釋放該鎖。而且須要注意不要引發死鎖。分佈式
配置文件依賴:ehcache.xml
3. Guava Cache
Guava Cache 是單個應用運行時的本地緩存。
Guava Cache 與 ConcurrentMap很類似,但也不徹底同樣。最基本的區別是 ConcurrentMap 會一直保存全部添加的元素,直到顯式地移除。相對地,Guava Cache 爲了限制內存佔用,一般都設定爲自動回收元素。在某些場景下,儘管 LoadingCache 不回收元素,它也是頗有用的,由於它會自動加載緩存。
Guva是google開源的一個公共java庫,相似於Apache Commons,它提供了集合,反射,緩存,科學計算,xml,io等一些工具類庫。
cache只是其中的一個模塊。使用Guva cache可以方便快速的構建本地緩存。
缺點就是若是要組件集羣同步的話,須要本身實現這個功能。
2、分佈式緩存
1. memcache
2. redis
3. mongodb
4. Apache Cassandra
Apache Cassandra 是一種分佈式非關係型數據庫,具備高性能、可擴展、無中心化等特徵。Cassandra 是適用於社交網絡業務場景的數據庫,適合實時事務處理和提供交互型數據。以 Amazon 徹底分佈式的 Dynamo 數據庫做爲基礎,結合 Google BigTable 基於列族(Column Family)的數據模型,實現 P2P 去中心化的存儲。
3、緩存一致性