我在2个服务器上部署了Ehcache,现在想手工同步一下2个缓存,就是用代码同步一下缓存 怎么实现 就是缓存2的内容 读取到缓存1中 然后手工根据内容判断 形成一个新的缓存版本 然后同步2个缓存。
我看网上的例子都是自动同步 cache1发生变化 立即通知cache2 这样比较耗费服务器资源 我想当我发送指令时cache1和cache2才同步 怎么做到?
试试terracotta :P
EhCache本身是有集群同步功能的,不需要手工做。最典型的是hibernate搭配EhCache,直接配置文件里面打开同步功能就可以了。
Terracotta和缓存同步其实关系不太大,主要通过一种bit流的技术在虚拟机一级做同步,是终极集群方案,但是效果还有待观察。
其实有更省事儿的办法,你不需要部署两个EhCache,只需要部署Memcached就可以了,集中式缓存,永远不会有同步问题。
不建议用代码去手工实现,因为ehcache不像memcached那样有专门的缓存服务器,ehcache缓存的对象都是直接存储在JVM内存中。如果是memcached缓存,倒可以直接发送指令同步
在数据中作一个缓存对象时间戳的表,每次缓存对象发生变化都修改时间,然后做一个TIMERTASK 定期查询这个表,发现变化后就同步内存,很土,但是比较实用
实在不行的话,结合拦截器使用,只对执行某些方法时进行拦截,这时候起用Ehcache缓存功能(query.setCacheable(true)),其它时间不起用缓存(自然不会同步)