[系统设计]--(1)小并发量、低延时、通用场景下的接口并发锁

Author:赵志乾
Date:2020-04-04
Declaration:All Right Reserved!!!

实际项目中的接口大致可以分为两大类:查询类与修改类。对于查询类接口而言,其对业务数据是没有影响的(对查询进行统计的功能除外)。针对此类对业务数据无影响的接口,完全可以放开并发控制,以提高接口的响应速度。而对于修改类接口,其操作会影响到业务数据。为避免数据不一致,需要进行并发控制。而并发控制最常用的操作手段就是加锁。

Redis锁

使用redis进行分布式并发控制是一种常用的并发锁方案。使用起来也非常的简单。代码如下:

// Jedis封装加锁和释放锁操作
public boolean getLock(String key,int expireTime){
    String key = "my:lock:" + key;
    String result = jedis.set(key, String.valueOf(System.currentTimeMillis()), "NX", "EX",expireTime);
    return (null != result && "OK".equalsIgnoreCase(result)) ? true : false;
}


public void releaseLock(String key) {
     if (StringUtils.isNotBlank(key)) {
         String key = "my:lock:" + key;
         jedis.del(key);
    }
}


// 接口并发控制模板
public Object operate(String userId,Object param){
      String lockKey = "operate:"+userId;
      boolean lockResult = jedis.getLock(lockKey,10);
      if(!lockResult){
         // 返回系统繁忙
      }

      try{
         // 业务代码
      }
      finally{
        jedis.releaseLock(lockKey);
      }
}

使用上述的并发锁能够满足小并发量的通用场景,而在一些大并发或者特殊业务场景下,该并发锁样板将会失去作用。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值