》》其他node收到广播时,从本地cache删除该id的对象,下次有人访问时
》》要从新取,所以,缓存数据的新鲜性要依赖后台数据库来实现。用
》》jGROUP实现广播很容易,看看swormcache的代码,很简单的。

能否大概讲解一下利用广播的实现机制!

获益匪浅

对于这个问题,我基本上知道如何做了.现在最基本上的要解决3个问题:
1.如何把数据存储到cache中?
2.如何把数据读进cache,,如何输出数据?
3.如何解决同步性?

在这3个问题上,我是通过treecache中的hashmap来解决的
不知道各位对这3个问题解决的方法有何高见呢,

用HashMap可能不太好,当然这也要看你的应用,如果并发很高的话,
Collections.synchronizedMap的效率就十分低了。并发高的CASE要用
其他的CACHE来避免线程之间的征用。

如果Cache的数据较多,就要考虑垃圾回收的问题,否则好多数据在Cache完全就是没用,会一直占用内存。所以一般可以采用LRU的MAP+垃圾回收的MAP构建一个新的Map。

treeCache中的HashMap是怎么写的我不清楚,因为我没看过,但Doug Lea的util.concurrent包中的ConcurrentHashMap我认为绝对精彩,实际上是把一个HashMap分为32区,每个区都对应一个机锁,这样极大的提高了并发性,在查询时甚至都不必锁定,无认并发性还是检索的速度都比java.util.hashtable好许多,特别是在线程较多的情况下,性能可能担高几十倍。
楼上OLDMAN说要考虑垃圾回收的问题,我有些不明白。如果是要考虑没用的数据长时间占据内存的话,那为什么不仿造JIVE中的CACHE?或者用一个线程来实现过期数据的清除!

我看了一下jive还有swarmcache里边的实现,swarmcache里用到UDP的广播,我不知道这个对于性能的影响会不会很大, 另外,对于数据的新鲜性,jive里对于每一个cache object都有一个最长生命周期,如果过了他将被clear掉,重新从数据库取最新的,但是如果时间高的比较长的话,会不会是数据库的内容已经更新了,但是cache中的内容还是老的内容怎么办,而对swarmcache中的和数据库的数据新鲜性同步我不知道是怎么实现的,如果是其中的TimerCache好像也是按时间比如1秒钟更新一回, 不知道是不是我理解错的,请教各位一下,难道要每次对数据库做更新操作的时候都要去把cache更新一回吗?

数据量太大,结构太复杂,不如把数据库全放到内存中去运行。这样,cache也不用太花精力了。