zoukankan      html  css  js  c++  java
  • 使用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         }
    伪代码
    甘于平凡,做一个甘于平凡的人,菜米油盐,生老病死。
  • 相关阅读:
    TSQL Beginners Challenge 1
    SQL拾遗
    简易实体生成方式
    CTE-递归[2]
    编号处理
    行列转换/横转竖
    OUTPUT、Merge语句的使用
    关于SQL IO的一些资料
    对左值(lvalue)和右值(rvalue)的两种理解方式
    跨平台判断64位和32位开发的一些宏定义
  • 原文地址:https://www.cnblogs.com/rolayblog/p/10643193.html
Copyright © 2011-2022 走看看