我们要集群式同步数据,必须实现这三个方法:
public void cacheEntryAdded(CacheEntryEvent event) {
}
public void cacheEntryRemoved(CacheEntryEvent event) {
}
public void cacheEntryUpdated(CacheEntryEvent event) {
}
ackage com.test;
import com.opensymphony.oscache.base.events.CacheEntryEvent;
import com.opensymphony.oscache.plugins.clustersupport.ClusterNotification;
import com.opensymphony.oscache.plugins.clustersupport.JavaGroupsBroadcastingListener;
public class JavaGroupsBroadcastingListenerImpl extends
JavaGroupsBroadcastingListener {
public void handleClusterNotification(ClusterNotification message) {
switch (message.getType()) {
case CacheConstants.CLUSTER_ENTRY_ADD:
System.out.println("集群新增:" + message.getData());
if(message.getData() instanceof QflagCacheEvent) {
QflagCacheEvent event = (QflagCacheEvent)message.getData();
cache.putInCache(event.getKey(), event.getEntry().getContent(),null,null,CLUSTER_ORIGIN);
}
break;
case CacheConstants.CLUSTER_ENTRY_UPDATE:
System.out.println("集群更新:" + message.getData());
if(message.getData() instanceof QflagCacheEvent) {
QflagCacheEvent event = (QflagCacheEvent)message.getData();
// cache.flushEntry(event.getKey());
cache.putInCache(event.getKey(), event.getEntry().getContent(),null,null,CLUSTER_ORIGIN);
}
break;
case CacheConstants.CLUSTER_ENTRY_DELETE:
System.out.println("集群删除:" + message.getData());
if(message.getData() instanceof QflagCacheEvent) {
QflagCacheEvent event = (QflagCacheEvent)message.getData();
// cache.removeEntry(event.getKey(),event.getOrigin());
cache.removeEntry(event.getKey());
}
break;
}
}
public void cacheEntryAdded(CacheEntryEvent event) {
super.cacheEntryAdded(event);
System.out.println("属性添加");
if(!CLUSTER_ORIGIN.equals(event.getOrigin())) {
sendNotification(new ClusterNotification(CacheConstants.CLUSTER_ENTRY_ADD, new QflagCacheEvent(event.getMap(),event.getEntry(),CLUSTER_ORIGIN)));
}
}
// @Override
// public void cacheEntryFlushed(CacheEntryEvent event) {
//
// super.cacheEntryFlushed(event);
// if(!CLUSTER_ORIGIN.equals(event.getOrigin())) {
// sendNotification(new ClusterNotification(CacheConstants.CLUSTER_ENTRY_ADD, new UcallCacheEvent(event.getMap(),event.getEntry(),CLUSTER_ORIGIN)));
// }
// }
@Override
public void cacheEntryRemoved(CacheEntryEvent event) {
System.out.println("属性移除");
super.cacheEntryRemoved(event);
if(!CLUSTER_ORIGIN.equals(event.getOrigin())) {
sendNotification(new ClusterNotification(CacheConstants.CLUSTER_ENTRY_DELETE, new QflagCacheEvent(event.getMap(),event.getEntry(),CLUSTER_ORIGIN)));
}
}
@Override
public void cacheEntryUpdated(CacheEntryEvent event) {
System.out.println("属性更新");
super.cacheEntryUpdated(event);
if(!CLUSTER_ORIGIN.equals(event.getOrigin())) {
sendNotification(new ClusterNotification(CacheConstants.CLUSTER_ENTRY_UPDATE, new QflagCacheEvent(event.getMap(),event.getEntry(),CLUSTER_ORIGIN)));
}
}
}
然后修改配置文件,映射cache.event.listeners类的路径:
cache.event.listeners=com.test.JavaGroupsBroadcastingListenerImpl
cache.cluster.properties=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;\
mcast_send_buf_size=150000;mcast_recv_buf_size=80000):\
PING(timeout=2000;num_initial_members=3):\
MERGE2(min_interval=5000;max_interval=10000):\
FD_SOCK:VERIFY_SUSPECT(timeout=1500):\
pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192):\
UNICAST(timeout=300,600,1200,2400):\
pbcast.STABLE(desired_avg_gossip=20000):\
FRAG(frag_size=8096;down_thread=false;up_thread=false):\
pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true)
cache.cluster.multicast.ip=231.12.21.132
分享到:
相关推荐
本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是Hibernate内置的Session级别的缓存,它存储了在同一个Session内操作的对象,避免了频繁的数据库读写。然而,一级缓存仅...
接着,我们需要配置osCache的行为,这通常通过oscache.properties文件实现。这个文件定义了缓存的各种参数,如缓存的默认过期时间、是否启用缓存更新通知等。例如,以下是一段基本的oscache.properties配置示例: `...
本文将深入探讨Oscache框架的搭建步骤及其实现原理,帮助开发者掌握这一技术,从而显著提高Web系统的运行效率。 #### 搭建Oscache框架的基本步骤 1. **初始化Web项目**:首先,确保你的开发环境已就绪,创建一个新...
javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...
在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...
- 配置osCache作为Spring的缓存提供者:在Spring的配置文件中,定义一个bean来引用osCache,并声明缓存注解的实现,然后在需要缓存的方法上添加@Cacheable等注解。 4. **osCache的工作原理**: - osCache基于内存...
3. 更新通知:当缓存中的数据发生变化时,osCache可以通过事件机制通知其他系统组件,实现数据的一致性。 4. 缓存同步:在多线程或多服务器环境下,osCache提供了一套机制来确保缓存数据的一致性和完整性。 三、...
OSCache 提供了一个名为 `CacheFilter` 的过滤器,该过滤器用于实现页面级别的缓存。通过在 `web.xml` 文件中配置,我们可以指定哪些页面或一组页面需要被缓存。当客户访问并返回 HTTP 状态码为 200(表示访问成功)...
4. 集群支持:可以实现跨节点的缓存共享,适用于分布式环境。 技术预研目标 预研的目标是熟悉OSCache的安装、配置、使用方法,并评估其在现有项目中的适用性。 技术预研工作成果 5.1 OSCACHE 下载与部署 首先,从...
- **集群支持**:在分布式环境中,osCache可以实现多节点间的缓存同步,确保数据一致性。 - **缓存预热**:允许在应用启动时加载预定义的数据到缓存,提高应用启动速度。 - **缓存监听器**:可以通过监听器来监控...
5. **src**:源代码目录,如果提供的话,可以查看osCache的内部实现,这对于学习和调试很有帮助。开发者可以研究源码来理解osCache的工作原理,并且在必要时进行定制或扩展。 6. **lib**:依赖库目录,可能包含了...
OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对数据库或其他数据源的访问,从而降低系统负载。本示例将通过一个天气预报Web服务的场景,详细...
- **缓存同步**: 在分布式环境中,osCache可以通过JGroups实现缓存的同步,确保多节点间缓存的一致性。 - **缓存监听器**: 可以注册监听器(CacheEventListener),在缓存项的添加、更新、移除等事件发生时执行相应...
- **分布式缓存**:在多服务器环境中,osCache可以通过JMS(Java Message Service)实现分布式缓存,确保数据的一致性并分摊负载。 ### 2. osCache的安装与配置 osCache通常作为JAR包添加到项目的类路径中。配置...
这篇博客将深入探讨如何利用OSCache来实现页面缓存,并结合实际案例进行解析。 首先,我们需要理解页面缓存的基本原理。页面缓存是指将频繁访问的网页内容存储在内存中,当用户请求这些页面时,不再需要重新生成...
OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...
在OSCache中,缓存管理主要通过`Cache`接口实现。开发者可以创建并初始化一个`Cache`实例,然后将数据放入缓存。例如: ```java Cache cache = CacheManager.getInstance().getCache("myCache"); cache.put(key, ...
它是`osCache`的二进制库,包含了所有实现缓存功能的类和方法。这个版本(2.4.1)代表了该软件的一个稳定版本,可能包含了一些bug修复和性能优化。`osCache`提供了一套完整的API,允许开发者方便地集成到他们的应用...