关于分布式缓存

最近几天,由于想做tomcat负载均衡,搭建成功后就出现了一个问题,那就是缓存怎么办。我用ibatis的缓存直接做的,所以如果多个tomcat各自的缓存都是在自己进程的内存中,互不相干。这就带来了麻烦。在网上搜索资料,还是有收获的,发现分布式的缓存架构有EHCache,OSCache.
EHCache性能比memcached要好一点,但是客户端只有java的,而memcached是各种语言都有,所以得到了广泛的运用。个人认为memcached很不错,因为我在项目中socket通讯得到的数据都是用它来缓存的,很好用。
OSCache也是一个很好的分布式缓存。但是搭建时容易出现问题,报classnotfindexception。解决方案,是换用jgroups官网的jar包,然后在jvm上修改参数-Djava.net.preferIPv4Stack=true,如果你的系统支持ipv6,而是用的是ipv4协议就修改下。这样服务器就能启动成功了
具体OSCache安装如下
1. 导入oscache-2.4.1.jar(可以到官网下载)

2.定义oscache.properties

#是否使用内存作为缓存空间
cache.memory=true
 
#缓存管理事件监听器,通过这个监听器可以获知当前Cache的运行情况 
#cache.event.listeners=com.opensymphony.oscache.plugins.clustersupport.JavaGroupsBroadcastingListener

#如果使用磁盘缓存(cache.memory=false),则需要指定磁盘存储接口实现
#cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
 
# 磁盘缓存所使用的文件存储路径
# cache.path=c:\\myapp\\cache

# 缓存调度算法,可选的有LRU,FIFO和无限缓存(UnlimitedCache)  


# cache.algorithm=com.opensymphony.oscache.base.algorithm.FIFOCache
# cache.algorithm=com.opensymphony.oscache.base.algorithm.UnlimitedCache
cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache
 
#内存缓存的最大容量
cache.capacity=1000
 
# 是否限制磁盘缓存的容量
# cache.unlimited.disk=false

# 基于JMS的集群缓存同步配置
#cache.cluster.jms.topic.factory=java:comp/env/jms/TopicConnectionFactory
#cache.cluster.jms.topic.name=java:comp/env/jms/OSCacheTopic
#cache.cluster.jms.node.name=node1


3.定义xml

<cacheModel id="userCache" type="OSCACHE">
   <flushInterval hours="24"/>
   <flushOnExecute statement="user_space.insertUsers"/>
   <flushOnExecute statement="user_space.updateUsers"/>
   <property name="size" value="1000" />
  </cacheModel>
到此基本配置完毕。具体的测试细节有时间继续补上...
由于网上缓存的相关文章都是一个样,相互copy。等我把项目搞定后,一定弄一个好的解决方案,这样能方便大家,也为以后自己用上。

猜你喜欢

转载自wangliang0209.iteye.com/blog/1710428