簡體   English   中英

拿起緩存實現,還是自己動手?

[英]Pick up a cache implementation, or roll your own?

我正在做一個Java EE應用程序,而且我已經得出結論,我需要為我的對象提供緩存。

我目前的要求並不比某種鍵值存儲復雜得多,可能是可以處理樹的東西。 編寫一個包含一個或多個貼圖的簡單自定義靜態/單例類很有誘惑力。 但是,由於有幾個實現或多或少都像這樣(Memcached浮現在腦海中),我開始想知道使用Memcached必須有一些附加值,而不僅僅是我自己的實現。

所以,我想問一下這個問題:為什么我可以選擇一個現成的緩存,當我可以自己創建靜態數據時? 反之亦然; 當我可以拿起現成的緩存時,為什么要寫一個靜態類呢?

有許多緩存實現,包括開源和商業。 關於編寫正確的緩存有很多問題 - 離開對象的時間,驅逐策略,持久性,內存管理等等,所以我不會啟動自己的一個(為什么重新發明輪子?)

看看以下實現之一:

有關更多信息,請訪問http://java-source.net/open-source/cache-solutions

對於復雜對象圖的許多情況,我使用單線程具有足夠好的性能

new MapMaker().weakKeys().makeMap();

這會使用Google集合創建一個地圖,可以用作復雜對象的緩存。

由於密鑰很弱,並且最終超出范圍,因此不太可能導致內存問題。

所以我會說簡單的情況 - 不要打擾分布式緩存的“認知負載”。 序列化問題,延遲等。你不會想要處理那些。

“當我可以拿起現成的緩存時,為什么要寫一個靜態類呢?”

當您不希望在項目中包含第三方依賴項時,沒有更好的方法來學習如何編寫緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM