依然,先發廣告:去皮兒網(http://www.qupier.com),每月26日通知你是否中簽。已經推出廣州的搖號結果通知了。

之前做業務系統,緩存用的是ehcache,集群的時候用multicast廣播通知。隨著節點的增多,希望把整個緩存切換到集中式緩存上來。折騰了兩天,各種碰壁。

首先是需求:
    1.Hibernate的二級緩存
    2.獨立的業務緩存
    3.支持region,支持keySet,containsKey,region內遍歷

首先看了大名鼎鼎的memcached,以及客戶端spymemcached。失敗。首先,不支持region,各種輪子都是在key上加前綴之類的做文章。不支持keySet,不支持containsKey,不支持遍歷。于是Pass。

然后看到了ehcache server,可惜人家似乎發展商業版本的torrxxxx去了,ehcache server也2年多沒有更新,并且沒有hibernate二級緩存結合的任何文檔、網文。Pass。

然后看到了Infinispan,據說是jboss cache 的后繼。也看到了hibernate-infinispan,也支持分區,心里一陣高興。使用RemoteCacheStore可以實現hibernate的二級緩存以及查詢緩存使用遠端的緩存服務器。深入嘗試,結果發現,首先,一定要jta,太不平民化了。其次,hibernate-infinispan里面明確寫了只支持read-only,non-restrict-read-write,transactional這三種緩存策略。但是我的已有代碼中有很多事read-write的。于是失敗了。

最后看到了redis,以及jedis。當前火爆的nosql數據庫。想來也可以實現我要的功能。根據網文,可以使用hashes的方式實現region。這個方面基本上符合要求。然后很高興在github上也找到了hibernate-redis這個項目,仔細一看,只支持read-only,non-restrict-read-write這兩種緩存策略。郁悶死了。后來同樣在github上看到一個jedis-lock項目,做了redis的鎖機制。開始嘗試修改hibernate-redis,依賴jedis-lock,想做個read-write策略出來,結果發現自己對hibernate的cache部分還是不太熟悉,里面各種softLock之類的東西,看ehcache的代碼就看頭大了。郁悶。

總結,如果你用jta,不用read-write,那么用hibernate-infinispan就好了。否則,,,就麻煩了。