哪一種緩存效果高?開源一個簡單的緩存組件j2cache

背景

如今的web系統已經愈來愈多的應用緩存技術,並且緩存技術確實是能實足的加強系統性能的。我在項目中也開始接觸一些緩存的需求。java

  • 開始簡單的就用jvm(java託管內存)來作緩存,這樣對於單個應用服務器來講很好。
  • 爲了系統的可用性,須要作災備,那麼就要多準備一套系統環境,這時就會有一些共享資源的問題,好比Tomcat的session共享出來
  • 幾個系統會公用一套緩存數據,這樣就變成一個共享池

需求的增加也就帶來了系統的變化,也正爲這種變化我開始思考怎麼讓這些代碼兼容,併爲之後的系統模塊提供比較統一的支持。正好在openfire這個開源項目上獲得了啓發,它的集羣思路我以爲是種不錯的解決方案。git

j2cache介紹

隨後就開始寫一個簡單的緩存系統,結構很是的簡單,代碼也很是的簡單。說是開源其實也有點過了,只是以爲閉門造車沒有意思,因此將代碼放在github上,若是有高手看到指點一下那我不是賺大了。哈哈。github

github:https://github.com/mini188/j2cacheweb

代碼很是簡單,maven工程引入也很容易,我就不打算對代碼作啥說明,有興趣的朋友下載簡單看看就能明白。 imageredis

項目主要特色:

  • 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:8Gsession

Redis用的是Redis on Windows Redis-x64-3.2.100jvm

本地環境中寫入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
相關文章
相關標籤/搜索