依然,先發(fā)廣告:去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。已經(jīng)推出廣州的搖號(hào)結(jié)果通知了。

之前做業(yè)務(wù)系統(tǒng),緩存用的是ehcache,集群的時(shí)候用multicast廣播通知。隨著節(jié)點(diǎn)的增多,希望把整個(gè)緩存切換到集中式緩存上來。折騰了兩天,各種碰壁。

首先是需求:
    1.Hibernate的二級(jí)緩存
    2.獨(dú)立的業(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二級(jí)緩存結(jié)合的任何文檔、網(wǎng)文。Pass。

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

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

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