`
隐形的翅膀
  • 浏览: 498237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现OSCache

 
阅读更多
我们要集群式同步数据,必须实现这三个方法:

    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和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是Hibernate内置的Session级别的缓存,它存储了在同一个Session内操作的对象,避免了频繁的数据库读写。然而,一级缓存仅...

    oscache缓存配置

    接着,我们需要配置osCache的行为,这通常通过oscache.properties文件实现。这个文件定义了缓存的各种参数,如缓存的默认过期时间、是否启用缓存更新通知等。例如,以下是一段基本的oscache.properties配置示例: `...

    Oscache框架的搭建步骤

    本文将深入探讨Oscache框架的搭建步骤及其实现原理,帮助开发者掌握这一技术,从而显著提高Web系统的运行效率。 #### 搭建Oscache框架的基本步骤 1. **初始化Web项目**:首先,确保你的开发环境已就绪,创建一个新...

    oscache(JSP定制标记应用)

    javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...

    OSCache需要的包

    在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...

    oscache处理

    - 配置osCache作为Spring的缓存提供者:在Spring的配置文件中,定义一个bean来引用osCache,并声明缓存注解的实现,然后在需要缓存的方法上添加@Cacheable等注解。 4. **osCache的工作原理**: - osCache基于内存...

    oscache缓存技术入门实例

    3. 更新通知:当缓存中的数据发生变化时,osCache可以通过事件机制通知其他系统组件,实现数据的一致性。 4. 缓存同步:在多线程或多服务器环境下,osCache提供了一套机制来确保缓存数据的一致性和完整性。 三、...

    oscache详细配置文档

    OSCache 提供了一个名为 `CacheFilter` 的过滤器,该过滤器用于实现页面级别的缓存。通过在 `web.xml` 文件中配置,我们可以指定哪些页面或一组页面需要被缓存。当客户访问并返回 HTTP 状态码为 200(表示访问成功)...

    OSCache配置说明文档

    4. 集群支持:可以实现跨节点的缓存共享,适用于分布式环境。 技术预研目标 预研的目标是熟悉OSCache的安装、配置、使用方法,并评估其在现有项目中的适用性。 技术预研工作成果 5.1 OSCACHE 下载与部署 首先,从...

    oscache-java缓存框架

    - **集群支持**:在分布式环境中,osCache可以实现多节点间的缓存同步,确保数据一致性。 - **缓存预热**:允许在应用启动时加载预定义的数据到缓存,提高应用启动速度。 - **缓存监听器**:可以通过监听器来监控...

    oscache-2.2jar包

    5. **src**:源代码目录,如果提供的话,可以查看osCache的内部实现,这对于学习和调试很有帮助。开发者可以研究源码来理解osCache的工作原理,并且在必要时进行定制或扩展。 6. **lib**:依赖库目录,可能包含了...

    OsCache缓存框架使用示例

    OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对数据库或其他数据源的访问,从而降低系统负载。本示例将通过一个天气预报Web服务的场景,详细...

    oscache的使用实例和详解

    - **缓存同步**: 在分布式环境中,osCache可以通过JGroups实现缓存的同步,确保多节点间缓存的一致性。 - **缓存监听器**: 可以注册监听器(CacheEventListener),在缓存项的添加、更新、移除等事件发生时执行相应...

    oscache缓存技术

    - **分布式缓存**:在多服务器环境中,osCache可以通过JMS(Java Message Service)实现分布式缓存,确保数据的一致性并分摊负载。 ### 2. osCache的安装与配置 osCache通常作为JAR包添加到项目的类路径中。配置...

    基于OSCache的页面缓存(收藏)

    这篇博客将深入探讨如何利用OSCache来实现页面缓存,并结合实际案例进行解析。 首先,我们需要理解页面缓存的基本原理。页面缓存是指将频繁访问的网页内容存储在内存中,当用户请求这些页面时,不再需要重新生成...

    oscache的例子

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    OSCache缓存技术(6)【实例】

    在OSCache中,缓存管理主要通过`Cache`接口实现。开发者可以创建并初始化一个`Cache`实例,然后将数据放入缓存。例如: ```java Cache cache = CacheManager.getInstance().getCache("myCache"); cache.put(key, ...

    oscache所需jar包

    它是`osCache`的二进制库,包含了所有实现缓存功能的类和方法。这个版本(2.4.1)代表了该软件的一个稳定版本,可能包含了一些bug修复和性能优化。`osCache`提供了一套完整的API,允许开发者方便地集成到他们的应用...

Global site tag (gtag.js) - Google Analytics