背景
現在的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差這么大我沒有搞明白,不知道是不是我的方法不對呢?
![]() |
不含病毒。www.avast.com |