那位高手给我介绍一下缓存在JAVA程序里的处理方式,思路也好!

解决方案 »

  1.   

    //定义自己的缓存类
    public class MemberCache {
        //这里是默认的缓存时间
        public static final long TIME_OUT = DateUtil.HOUR;
     
        private static Log log = LogFactory.getLog(MemberCache.class);
     
       //创建一个单例
        static private MemberCache instance = new MemberCache();
     
       //真正的缓存对象,你缓存的东西全存在里面了
        private Cache cache;
        //构造函数
        public MemberCache() {
            try {
                //初始化缓存对象
                cache = CacheManager.getInstance().getCache("member");
            } catch (CacheException ex) {
                log.error("Cannot get the WhirlyCache. Member caching is disabled.", ex);
            } catch (LinkageError e) {
                // @todo: Should be never throw
                log.error("Cannot get the WhirlyCache caused by Package Conflict. Member caching is disabled.", e);
            }
        }
     
       
        static public MemberCache getInstance() {
            return instance;
        }
     
        public String getEfficiencyReport() {
            String result = "No report";
            if (cache == null) {
                if (MVNForumConfig.getEnableCacheMember() == false) {
                    result = "Cache is disabled.";
                } else {
                    result = "Cache cannot be inited";
                }
            } else if (cache instanceof CacheDecorator) {
                result = ((CacheDecorator)cache).getEfficiencyReport();
            }
            return result;
        }
     
        public void clear() {
            if (cache != null) {
                cache.clear();
            }
        }
     
        //这里存储并读取缓存一个用户总数信息
        public long getMemberTotalCount() throws ObjectNotFoundException, AssertionException, DatabaseException{
               long count = 0;
            if (cache != null) {
                //这里是键值
                String key = new String("getMemberTotalCount");
    //根据键值获取对象,这里原来是一个Long,但是存不进去,换成String就可以了
                String Scount = (String)cache.retrieve(key);
               //如果缓存中不存在 
    if (Scount == null) {
    //从非缓存中读取
                   Scount= = String.valueOf(DAOFactory.getMemberDAO().getNumberOfMembers());
                       //存入缓存
                    cache.store(key, Scount, DateUtil.MINUTE);
                    log.info("缓存中不存在,创建后存入");
                }else{
                       log.info("从缓存中读取会员总数成功");
                }
            } else {
                   //当前缓存未启用,从数据库中直接读取
                 
                   count = new Long(DAOFactory.getMemberDAO().getNumberOfMembers());
            }文章出处:http://www.diybl.com/course/3_program/java/javajs/20071221/92766.html