摘要:當你為系統加上快取時,有沒有考慮過使用快取需要注意哪些事項呢?往往開始做乙個專案時,不會過多的考慮效能問題,以快速迭代功能為主。後續隨著業務的快速發展,系統執行的效能越來越慢,此時,就需要對系統進行相應的優化,而效果最顯著的就是給系統加上快取。那麼,問題來了,當你為系統加上快取時,有沒有考慮過使用快取需要注意哪些事項呢?
快取命中率是從快取中讀取資料的次數與總讀取次數的比率,命中率越高越好。快取命中率=從快取中讀取次數 / (總讀取次數 (從快取中讀取次數 + 從慢速裝置上讀取次數))。這是乙個非常重要的監控指標,如果做快取,則應通過監控這個指標來看快取是否工作良好。
快取型別總體上來看,可以分為:堆快取、堆外快取、磁碟快取和分布式快取。
使用j**a堆記憶體來儲存物件。使用堆快取的好處是沒有序列化/反序列化,是最快的快取。缺點也很明顯,當快取的資料量很大時,gc(垃圾**)暫停時間會變長,儲存容量受限於堆空間大小。一般通過軟引用/弱引用來儲存快取物件。即當堆記憶體不足時,可以強制**這部分記憶體釋放堆記憶體空間。一般使用堆快取儲存較熱的資料。可以使用gu**a cache、ehcache 3.x、 mapdb實現。
即快取資料儲存在堆外記憶體,可以減少gc暫停時間(堆物件轉移到堆外,gc掃瞄和移動的物件變少了),可以支援更多的快取空間(只受機器記憶體大小限制,不受堆空間的影響)。但是,讀取資料時需要序列化/反序列化。因此,會比堆快取慢很多。可以使用ehcache 3.x、 mapdb實現。
分布式快取可以使用ehcache-clustered(配合terracotta server)實現j**a程序間分布式快取。也可以使用memcached、redis實現。
使用分布式快取時,有兩種模式如下:
快取的**策略總體上來說包含:基於空間的**策略、基於容量(空間)的**策略、基於時間的**策略和基於物件引用的**策略。
基於空間指快取設定了儲存空間,如設定為10mb,當達到儲存空間上限時,按照一定的策略移除資料。
基於容量指快取設定了最大大小,當快取的條目超過最大大小時,按照一定的策略移除舊資料。
ttl(time to live):存活期,即快取資料從建立開始直到到期的乙個時間段(不管在這個時間段內有沒有被訪問,快取資料都將過期)。
tti(time to idle):空閒期,即快取資料多久沒被訪問後移除快取的時間。
軟引用:如果乙個物件是軟引用,則當jvm堆記憶體不足時,垃圾**器可以**這些物件。軟引用適合用來做快取,從而當jvm堆記憶體不足時,可以**這些物件騰出一些空間供強引用物件使用,從而避免oom。
弱引用:當垃圾**器**記憶體時,如果發現弱引用,則將它立即**。相對於軟引用,弱引用有更短的生命週期。
注意:只有在沒有其他強引用物件引用弱引用/軟引用物件時,垃圾**時才**該引用。即如果有乙個物件(不是弱引用/軟引用物件)引用了弱引用/軟引用物件,那麼垃圾**時不會**該弱引用/軟引用物件。
使用基於空間和基於容量的快取會使用一定的策略移除舊資料,通常包含:fifo演算法、lru演算法和lfu演算法。
實際應用中基於lru的快取居多。
點選關注,第一時間了解華為雲新鮮技術~
人工智慧存在的問題是什麼(二)
首先我們給大家介紹一下第乙個人工智慧的問題,那就是常識的困難之處在於它對我們而言是在太顯而易見了,甚至很難用語言去描述它,進而在資料中給它打標籤。對於所有 顯而易見 的東西,我們存在巨大的盲點。因此,我們無法教計算機常識,不僅因為這可能不切實際,更根本的原因是我們甚至沒有意識到常識是什麼。直到我們發...
人工智慧存在的問題是什麼(三)
我們在前面說到了人工智慧中有乙個莫拉維克悖論,因為這是當今任何嚴肅的人工智慧工作的焦點。如果我們想解決莫拉維克的悖論,我們就多少需要模仿生物體純粹依靠觀察世界學習的能力,而不需要標籤。實現這一目標的乙個有希望的想法是構建乙個系統,對未來的事件進行 並通過將實際的發展與系統的 進行比較來學習。大量的實...
在ASP主件中的安全問題是什麼
asp主件中的安全問題 microsoft推出的asp以簡單,易用,多功能,可擴充性等強大功能得到了和大多數網管的青睞,大有完全替代cgi的趨勢,但是在這裡也存在一些問題,如果在使用asp的話,你網路的安全同時也大大降低了!下面為大家舉乙個例子,請按照下面的步驟 2,接下來開啟 開始 執行 選單輸入...