• 使用Redis实现分布式独占锁


    转载请注明出处:https://www.cnblogs.com/rolayblog/p/10643193.html

    背景

    项目中有一个定时同步任务,但是程序发布在多台服务器上,就意味着,在固定的时间多台服务器可能会拿到相同的数据,并且同时处理这个定时同步任务,这时候就可能会引发一系列的问题,比如死锁,如果任务中有发送消息给用户,那就会出现重复发送的情况。

    Redis SETNX key value 简介

    该命令全称为 SET if Not eXists,所以如果已将存在的key,再次Set会返回false,反之为true。总所周知,redis为单线程的,这里用来做分布式资源锁的管理是再好不过的了。

    代码实现(伪代码)

     1        String lockKey=lockKey;//唯一值,例如主键
     2         String lockValue=UUID.randomUUID().toString();
     3         //使用redis SETNX
     4         boolean flagSuc=SETNX(lockKey,lockValue,outtime);
     5         if(flagSuc)
     6         {
     7             //获取锁成功
     8         }else
     9         {
    10             //获取锁失败 其他服务器正在操作该资源
    11         }
    12         //操作完成后手动释放资源锁
    13         String theLockValue=getNX(lockKey);
    14         //验证独占锁value值,防止释放掉其他服务器的锁
    15         if(theLockValue.equals(lockValue))
    16         {
    17             //remove
    18         }
    伪代码
    甘于平凡,做一个甘于平凡的人,菜米油盐,生老病死。
  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/rolayblog/p/10643193.html
Copyright © 2020-2023  润新知