JCS实现分布式缓存共享

由于要做一个产品,并想希望产品实现分布式,不得不研究下分布式缓存。

缓存的开源项目很多,通过测试,JCS配置及使用最为容易,所以就选用它做为产品缓存管理器。

 

JCS是Apache的一个开源项目,项目网址:http://jakarta.apache.org/jcs/

实现步骤:

1、下载项目jar包,及依赖jar包

    jcs-1.3.jar

    commons-lang-2.3.jar

    commons-collections-2.1.1.jar

    concurrent-1.3.4.jar

2、JCS分布式配置

    在你项目WEB-INF/classes下配置文件cache.ccf

    内容如下:

       jcs.default=LTCP
       jcs.default.cache.attributes=org.apache.jcs.engine.CompositeCacheAttributes
       jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
       jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory
       jcs.auxiliary.LTCP.attributes=org.apache.jcs.auxiliary.lateral.socket.tcp.TCPLateralCacheAttributes
       jcs.auxiliary.LTCP.attributes.PutOnlyMode=true
       jcs.auxiliary.LTCP.attributes.TcpListenerPort=1100
       jcs.auxiliary.LTCP.attributes.UdpDiscoveryAddr=228.5.6.8
       jcs.auxiliary.LTCP.attributes.UdpDiscoveryPort=1101
       jcs.auxiliary.LTCP.attributes.UdpDiscoveryEnabled=true

   以上配置实现了局域网内组播形式的通信,你可以配置多台服务器,当一台更新缓存时,其他几台缓存同时被通知更新,实现分布式缓存需求。

3、代码实现

   实现代码相当简洁,附上我的缓存管理类。

   当其中一台机子实现addCache.updateCache.removeCache方法时,均会触发缓存同步事件。

 

 

附:

package com.framework.cache;

import org.apache.jcs.JCS;

/**
 * 用途:缓存管理器
 *
 * @author 顾伟民
 * @date 2009-11-12
 */
public class CacheManager {
 /**
  * 系统缓存体
  */
 public static JCS CACHE;
 
 /**
  * 初始化缓存管理器
  * @autor 顾伟民
  */
 public static void init() {
  try {
   CACHE = JCS.getInstance("SystemCache");
  }
  catch(Exception e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 新增缓存
  * @autor 顾伟民
  *
  * @param cacheKey 标识
  * @param obj 缓存对象
  * @return true或false
  */
 public static boolean addCache(String cacheKey, Object obj) {
  try {
   CACHE.put(cacheKey, obj);
   return true;
  }
  catch(Exception e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**
  * 更新缓存
  * @autor 顾伟民
  *
  * @param cacheKey 标识
  * @param obj 缓存对象
  * @return true或false
  */
 public static boolean updateCache(String cacheKey, Object obj) {
  try {
   if(CACHE.get(cacheKey)!=null) removeCache(cacheKey);
   return addCache(cacheKey, obj);
  }
  catch(Exception e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**
  * 删除缓存
  * @autor 顾伟民
  *
  * @param key 标识
  * @return true或false
  */
 public static boolean removeCache(String cacheKey) {
  try {
   CACHE.remove(cacheKey);
   return true;
  }
  catch(Exception e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**
  * 获取指定缓存对象
  * @autor 顾伟民
  *
  * @param key 标识
  * @return Object 缓存对象
  */
 public static Object getCache(String cacheKey) {
  try {
   return CACHE.get(cacheKey);
  }
  catch(Exception e) {
   e.printStackTrace();
   return null;
  }
 }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值