redis分布式锁

  1. 使用redis的SETNX命令实现分布式锁
          Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多个客户端对Redis的连接并不存在竞争关系。redis的SETNX命令可以方便的实现分布式锁。
          SETNX key value
          将key的值设为value,当且仅当key不存在。如给定的key已经存在,则SETNX不做任何动作。
          
          SETNX 是set if not exists的简写。设置成功,返回1 ,否则返回0 。

  1.  死锁问题:给对应的key值增加expire 过期时间设置


    代码实现:
    
public class RequestLockDaoRedisImpl {
      @Autowired
      private IRedisClient redisClient ;
      private String getLockKey( long userId) {
           return "LOCK:" + userId ;
     }
      @Override
      public boolean acquireUserLock( long per_userId, int expireSeconds) {
           try {
              String key = getLockKey(per_userId);
               if ( redisClient .setnx(key, System.currentTimeMillis() + "" ) == 1) {
                    redisClient .expire(key, expireSeconds);
                    return true ;
              }
          }
           catch (Exception e) {
               logger .error( "redis Exception!!!" );
          }
           return false ;
     }
      @Override
      public void delUserLock( long per_userId) {
          String key = getLockKey(per_userId);
           redisClient .del(key);
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值