背景 現在的web系統已經越來越多的應用緩存技術,而且緩存技術確實是能實足的增強系統性能的。我在項目中也開始接觸一些緩存的需求。 開始簡單的就用jvm(java托管記憶體)來做緩存,這樣對於單個應用伺服器來說很好。 為了系統的可用性,需要做災備,那麼就要多準備一套系統環境,這時就會有一些共用資源的問題 ...
背景
現在的web系統已經越來越多的應用緩存技術,而且緩存技術確實是能實足的增強系統性能的。我在項目中也開始接觸一些緩存的需求。
- 開始簡單的就用jvm(java托管記憶體)來做緩存,這樣對於單個應用伺服器來說很好。
- 為了系統的可用性,需要做災備,那麼就要多準備一套系統環境,這時就會有一些共用資源的問題,比如Tomcat的session共用出來
- 幾個系統會公用一套緩存數據,這樣就變成一個共用池
需求的增長也就帶來了系統的變化,也正為這種變化我開始思考怎麼讓這些代碼相容,併為以後的系統模塊提供比較統一的支持。正好在openfire這個開源項目上得到了啟發,它的集群思路我覺得是種不錯的解決方案。
j2cache介紹
隨後就開始寫一個簡單的緩存系統,結構非常的簡單,代碼也非常的簡單。說是開源其實也有點過了,只是覺得閉門造車沒有意思,所以將代碼放在github上,如果有高手看到指點一下那我不是賺大了。哈哈。
代碼非常簡單,maven工程引入也很容易,我就不打算對代碼做啥說明,有興趣的朋友下載簡單看看就能明白。
項目主要特點:
- Key-value的存儲結構
- 基於java.util.Map<K, V>介面,這樣很容易與hashmap之類的相容
- 基於策略模式的擴展
為此項目中實現了三種存儲方案:
- jvm虛擬機記憶體,適用於單應用,或者不需要同步的情況
- redis,適用於需要redis的場景,比如緩存共用等
- iginte,一種帶網路計算的方案
j2cache的入測試
測試機器環境:
我的測試方法比較簡單,向緩存里連續寫100萬個對象,然後看看處理的性能。說明一下,這些測試都是在本機完成的
OS:Windows7 64位
CPU:I5-4210U @ 1.70GHZ 2.40GHZ
RAM:8G
Redis用的是Redis on Windows Redis-x64-3.2.100
本地環境中寫入1,000,000個對象的
- 開始測試寫入緩存jvmCache
總共耗時:2380ms
每毫秒寫入:420條
每秒寫入:420000條
- 開始測試寫入緩存igniteCache
總共耗時:9503ms
每毫秒寫入:105條。
每秒寫入:105000條。
- 開始測試寫入緩存redisCache
總共耗時:40367ms
每毫秒寫入:24條。
每秒寫入:24000條。
結果
為了對各種方案進行一些數據上對比,做了一個簡單的寫入測試,使用本地記憶體做緩存這種方案最高效,寫入量達到42萬每秒。而redis則只達到了24000條/秒,我對redis不是特別熟悉,看到這個數據有點詫異。
我比較懶,沒有測試一段時間內的讀寫性能,只不過從這個簡單的測試中發現,本地記憶體的效果還是很高的,如果加上一些其他的功能,比如網路傳輸,數據同步等後性能會下降。
只不過redis和ignite差這麼大我沒有搞明白,不知道是不是我的方法不對呢?
註:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接! 若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝! http://www.cnblogs.com/5207