亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

如何操作Redis和zookeeper實現分布式鎖

2020-10-28 21:36:46
字體:
來源:轉載
供稿:網友

如何操作Redis和zookeeper實現分布式鎖

在分布式場景下,有很多種情況都需要實現最終一致性。在設計遠程上下文的領域事件的時候,為了保證最終一致性,在通過領域事件進行通訊的方式中,可以共享存儲(領域模型和消息的持久化數據源),或者做全局XA事務(兩階段提交,數據源可分開),也可以借助消息中間件(消費者處理需要能冪等)。通過Observer模式來發布領域事件可以提供很好的高并發性能,并且事件存儲也能追溯更小粒度的事件數據,使各個應用系統擁有更好的自治性。

1.分布式鎖

分布式鎖一般用在分布式系統或者多個應用中,用來控制同一任務是否執行或者任務的執行順序。在項目中,部署了多個tomcat應用,在執行定時任務時就會遇到同一任務可能執行多次的情況,我們可以借助分布式鎖,保證在同一時間只有一個tomcat應用執行了定時任務。

2.分布式鎖的實現方式

  • 使用redis的setnx()和expire()
  • 使用redis的getset()
  • 使用zookeeper的創建節點node
  • 使用zookeeper的創建臨時序列節點

3.使用redis的setnx()和expire()來實現分布式鎖

setnx(key,value) 如果key不存在,設置為當前key的值為value;如果key存在,直接返回。expire()來設置超時時間

定義注解類:

@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface Lockable{  // redis緩存key  String key();  // redis緩存key中的數據  String value() default "";  // 過期時間(秒),默認為一分鐘  long expire() default 60;}

定時任務增加注解@Lockable:

 @Lockable(key = "DistributedLock:dealExpireRecords") public void dealExpireRecords() { }

定義一個aop切面LockAspect,使用@Around處理所有注解為@Lockable的方法,通過連接點確認此注解是用在方法上,通過方法獲取注解信息,使用setIfAbsent來判斷是否獲取分布式鎖,如果沒有獲取分布式鎖,直接返回;如果獲取到分布式鎖,通過expire設置過期時間,并調用指定方法。

@Component@Slf4j@Aspectpublic class LockAspect {  @Autowired  private RedisTemplate redisTemplate;  @Around("@annotation(com.records.aop.Lockable)")  public Object distributeLock(ProceedingJoinPoint pjp) {    Object resultObject = null;    //確認此注解是用在方法上    Signature signature = pjp.getSignature();    if (!(signature instanceof MethodSignature)) {      log.error("Lockable is method annotation!");      return resultObject;    }    MethodSignature methodSignature = (MethodSignature) signature;    Method targetMethod = methodSignature.getMethod();    //獲取注解信息    Lockable lockable = targetMethod.getAnnotation(Lockable.class);    String key = lockable.key();    String value = lockable.value();    long expire = lockable.expire();    // 分布式鎖,如果沒有此key,設置此值并返回true;如果有此key,則返回false    boolean result = redisTemplate.boundValueOps(key).setIfAbsent(value);    if (!result) {      //其他程序已經獲取分布式鎖      return resultObject;    }    //設置過期時間,默認一分鐘    redisTemplate.boundValueOps(key).expire(expire, TimeUnit.SECONDS);    try {      resultObject = pjp.proceed(); //調用對應方法執行    } catch (Throwable throwable) {      throwable.printStackTrace();    }    return resultObject;  }}

4.使用redis的getset()來實現分布式鎖

此方法使redisTemplate.boundValueOps(key).getAndSet(value)的方法,如果返回空,表示獲取了分布式鎖;如果返回不為空,表示分布式鎖已經被其他程序占用

5.使用zookeeper的創建節點node

使用zookeeper創建節點node,如果創建節點成功,表示獲取了此分布式鎖;如果創建節點失敗,表示此分布式鎖已經被其他程序占用(多個程序同時創建一個節點node,只有一個能夠創建成功)

6.使用zookeeper的創建臨時序列節點

使用zookeeper創建臨時序列節點來實現分布式鎖,適用于順序執行的程序,大體思路就是創建臨時序列節點,找出最小的序列節點,獲取分布式鎖,程序執行完成之后此序列節點消失,通過watch來監控節點的變化,從剩下的節點的找到最小的序列節點,獲取分布式鎖,執行相應處理,依次類推......

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情a∨在线视频播放| 另类天堂视频在线观看| 视频一区视频二区国产精品| 国产精品免费福利| 98视频在线噜噜噜国产| 精品久久久久久久久久ntr影视| 欧美高清激情视频| 欧美一级bbbbb性bbbb喷潮片| 中文字幕国产亚洲| 国产精品极品美女在线观看免费| 国产精品精品视频一区二区三区| 在线观看视频99| 国产精品一区二区性色av| 成人黄色短视频在线观看| 91系列在线播放| 国内成人精品视频| 亚洲欧洲视频在线| 欧美丰满少妇xxxxx| 91成人精品网站| 中文字幕精品一区二区精品| 日本在线观看天堂男亚洲| 久久人人爽人人爽人人片av高清| 一区二区三区视频在线| 国产一区二区三区毛片| 另类色图亚洲色图| 97视频网站入口| 91亚洲精品一区| 亚洲xxxx在线| 91在线观看免费观看| 成人妇女免费播放久久久| 97香蕉久久夜色精品国产| 中文字幕在线看视频国产欧美| 国产精品自产拍在线观看中文| 成人a免费视频| 性欧美办公室18xxxxhd| 国产一区二区免费| 亚洲字幕一区二区| 亚洲iv一区二区三区| 草民午夜欧美限制a级福利片| 国产精品一区二区三区免费视频| 欧美精品中文字幕一区| 欧美成人在线免费视频| 久久婷婷国产麻豆91天堂| 成人在线国产精品| 日韩成人激情在线| 少妇高潮久久久久久潘金莲| 久久久噜噜噜久久中文字免| 亚洲白拍色综合图区| 亚洲成人久久久久| 一本一道久久a久久精品逆3p| 搡老女人一区二区三区视频tv| 国产精品吊钟奶在线| 成人乱人伦精品视频在线观看| 91高清在线免费观看| 亚州欧美日韩中文视频| 国产欧美日韩中文| 亚洲一区二区三区xxx视频| 国产日韩欧美成人| 69视频在线播放| 国产日韩精品在线| 韩曰欧美视频免费观看| 国产精品一二三视频| 欧美最猛性xxxxx(亚洲精品)| 中文字幕在线国产精品| 国产精品99久久久久久www| 日韩精品极品视频| 国产成人精品一区二区在线| 亚洲丁香婷深爱综合| 成人有码视频在线播放| 日韩av成人在线观看| 97香蕉久久超级碰碰高清版| 国产91精品视频在线观看| 欧美xxxx做受欧美.88| 91av在线播放视频| 欧美精品xxx| 日韩av电影在线网| 91精品国产综合久久香蕉| 国产精品99久久久久久白浆小说| 国产亚洲精品91在线| 亚洲一区二区三区在线视频| 中文字幕欧美精品在线| 一区二区三区动漫| 97久久超碰福利国产精品…| 欧美日韩一区免费| 91国内精品久久| 国产欧美日韩视频| 国产精品久在线观看| 欧洲精品久久久| 日韩国产中文字幕| 91精品久久久久久久久久入口| 亚洲跨种族黑人xxx| 国产精品亚洲综合天堂夜夜| 国产极品精品在线观看| 国产欧美一区二区三区久久| 精品久久久久久久久久国产| 国产精品专区h在线观看| 91精品在线国产| 久久99久久久久久久噜噜| 欧美午夜精品在线| 日韩有码在线视频| 91精品国产沙发| 欧美性20hd另类| 国产亚洲一区精品| 久久久久免费精品国产| 欧美国产激情18| 亚洲精品电影在线观看| 日韩在线观看免费全| 欧美亚洲在线观看| 亚洲专区中文字幕| 91久久精品美女| 日韩亚洲国产中文字幕| 亚洲综合中文字幕68页| 丝袜美腿亚洲一区二区| 欧美日本啪啪无遮挡网站| 91精品免费久久久久久久久| 久久亚洲私人国产精品va| 欧美成人午夜激情| 欧美大全免费观看电视剧大泉洋| 欧美中文字幕在线视频| 国产精品久久久久久久一区探花| 亚洲天堂免费视频| 91手机视频在线观看| 欧美精品videos| 国产精品免费一区二区三区都可以| 精品av在线播放| 欧美日本在线视频中文字字幕| 欧洲s码亚洲m码精品一区| 亚洲在线观看视频| 成人精品一区二区三区| 欧美极品少妇xxxxx| 亚洲一区二区三区乱码aⅴ蜜桃女| 国内精品久久久久伊人av| 伦伦影院午夜日韩欧美限制| 91久久久久久久久久久久久| 精品国产鲁一鲁一区二区张丽| 欧美亚洲国产日本| 欧美激情一区二区三级高清视频| 九九热99久久久国产盗摄| 久久久999国产| 亚洲在线免费视频| 亚洲女人天堂av| 最近2019年手机中文字幕| y97精品国产97久久久久久| 欧美性猛交xxxx黑人| 国产精品观看在线亚洲人成网| 日产精品久久久一区二区福利| 日韩精品在线私人| 亚洲国产97在线精品一区| 亚洲国产精品一区二区久| 欧美专区第一页| 亚洲理论片在线观看| 国产精品久久久久7777婷婷| 欧美激情性做爰免费视频| xvideos成人免费中文版| 久久夜精品va视频免费观看| 亚洲欧美在线第一页| 国产亚洲a∨片在线观看| 影音先锋欧美精品| 91精品久久久久久久久久入口| xxx成人少妇69| 亚洲午夜av久久乱码| 69视频在线播放| 亚洲人成在线播放| 亚洲男人的天堂在线|