依然,先發(fā)廣告:
去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。已經(jīng)推出廣州的搖號結(jié)果通知了。
之前做業(yè)務(wù)系統(tǒng),緩存用的是ehcache,集群的時候用multicast廣播通知。隨著節(jié)點的增多,希望把整個緩存切換到集中式緩存上來。折騰了兩天,各種碰壁。
首先是需求:
1.Hibernate的二級緩存
2.獨立的業(yè)務(wù)緩存
3.支持region,支持keySet,containsKey,region內(nèi)遍歷
首先看了大名鼎鼎的memcached,以及客戶端spymemcached。失敗。首先,不支持region,各種輪子都是在key上加前綴之類的做文章。不支持keySet,不支持containsKey,不支持遍歷。于是Pass。
然后看到了ehcache server,可惜人家似乎發(fā)展商業(yè)版本的torrxxxx去了,ehcache server也2年多沒有更新,并且沒有hibernate二級緩存結(jié)合的任何文檔、網(wǎng)文。Pass。
然后看到了Infinispan,據(jù)說是jboss cache 的后繼。也看到了hibernate-infinispan,也支持分區(qū),心里一陣高興。使用RemoteCacheStore可以實現(xiàn)hibernate的二級緩存以及查詢緩存使用遠端的緩存服務(wù)器。深入嘗試,結(jié)果發(fā)現(xiàn),首先,一定要jta,太不平民化了。其次,hibernate-infinispan里面明確寫了只支持read-only,non-restrict-read-write,transactional這三種緩存策略。但是我的已有代碼中有很多事read-write的。于是失敗了。
最后看到了redis,以及jedis。當前火爆的nosql數(shù)據(jù)庫。想來也可以實現(xiàn)我要的功能。根據(jù)網(wǎng)文,可以使用hashes的方式實現(xiàn)region。這個方面基本上符合要求。然后很高興在github上也找到了hibernate-redis這個項目,仔細一看,只支持read-only,non-restrict-read-write這兩種緩存策略。郁悶死了。后來同樣在github上看到一個jedis-lock項目,做了redis的鎖機制。開始嘗試修改hibernate-redis,依賴jedis-lock,想做個read-write策略出來,結(jié)果發(fā)現(xiàn)自己對hibernate的cache部分還是不太熟悉,里面各種softLock之類的東西,看ehcache的代碼就看頭大了。郁悶。
總結(jié),如果你用jta,不用read-write,那么用hibernate-infinispan就好了。否則,,,就麻煩了。