大资源的分配与控制

在应用中,总有一些业务操作可能会引起大数据量的查询,基于应用健壮性的考虑,需要对这些业务控制起来。

 

思路:外围业务每次请求时,应用每次申请一个资源,当超过限定的资源总数时,不允许业务继续进行.
       try{

           applyResource();
           do业务();

       }

       finally{

            releaseResource();

       }
      

实现1:在数据库中,针对具体业务插入一条记录(sysName,sysCount),
      synchronized void applyResource(){
 count=selectCountFromDB();
        if(count<limitCount){
            updateCount(++count);
        }else{
            throw new RuntimeException();
        }
      } 

      synchronized void releaseResource(){
            count=selectCountFromDB();
            updateCount(--count);
      }  

 

实现2:在cache中,针对具体业务put一个对象(sysName,sysCount)
      synchronized void applyResource(){
 count=selectCountFromCache();
        if(count<limitCount){
              updateCount(++count);
        }else{
               throw new RuntimeException();
        }
      } 

      synchronized void releaseResource(){
              count=selectCountFromCache();
              updateCount(--count);
      }      

 

 

继续扩展:

       try{

           applyResource();
           do业务();

       }

       finally{

            releaseResource();

       }

基于此模式,可以利用AOP拦截器的模式,来一个配一个,来一对配一双,将申请资源和具体业务解耦合
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值