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

首頁 > 數據庫 > Redis > 正文

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

2020-03-17 12:37:45
字體:
來源:轉載
供稿:網友

如何操作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來監控節點的變化,從剩下的節點的找到最小的序列節點,獲取分布式鎖,執行相應處理,依次類推......

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


注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人av网址| 92福利视频午夜1000合集在线观看| 91精品国产免费久久久久久| 在线播放国产一区中文字幕剧情欧美| 国产精品igao视频| 日韩精品在线私人| 日韩在线免费视频| 大胆人体色综合| 亚洲xxxx做受欧美| 成人激情在线播放| 久久夜色精品国产亚洲aⅴ| 欧美成人性生活| 91国产在线精品| 色婷婷亚洲mv天堂mv在影片| 2019av中文字幕| 久久偷看各类女兵18女厕嘘嘘| 亚洲第一网站男人都懂| 日本韩国在线不卡| 亚洲黄色av女优在线观看| 日韩av一区二区在线| 日本sm极度另类视频| 国产精品老女人精品视频| 久久久久久有精品国产| 亚洲小视频在线观看| 日韩av在线免费播放| 国产亚洲欧美aaaa| 26uuu日韩精品一区二区| 青青久久av北条麻妃黑人| 成年无码av片在线| 成人高h视频在线| 欧美电影在线观看高清| 精品国产拍在线观看| 亚洲欧美国产精品va在线观看| 91色在线视频| 久久久久久久久爱| 日韩精品欧美激情| 欧美成人午夜激情视频| 91在线播放国产| 欧美日韩国产综合视频在线观看中文| 川上优av一区二区线观看| 亚洲夜晚福利在线观看| 欧美视频精品一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 人妖精品videosex性欧美| 成人激情电影一区二区| 久久男人资源视频| 欧美激情精品久久久久久黑人| 亚洲一区二区福利| 国内精品小视频在线观看| 亚洲bt欧美bt日本bt| 久久精品99无色码中文字幕| 久久国产精品久久久久久久久久| 91精品国产综合久久男男| 亚洲一品av免费观看| 日韩国产欧美精品在线| 97在线视频免费| 欧美性猛交99久久久久99按摩| 欧美xxxx14xxxxx性爽| 青草青草久热精品视频在线网站| 福利一区福利二区微拍刺激| 久久久中文字幕| 在线精品国产欧美| 亚洲成av人片在线观看香蕉| 日韩一区在线视频| 福利一区福利二区微拍刺激| 国产国产精品人在线视| 亚洲毛茸茸少妇高潮呻吟| 国产精品视频999| 97国产一区二区精品久久呦| 国产精品久久久久久久av大片| 久久久久久久久久久久av| 欧美多人乱p欧美4p久久| 一区二区三区日韩在线| 亚洲国产成人精品久久| 久久久精品久久| 96pao国产成视频永久免费| 91精品国产91久久久久| 中文字幕精品国产| 亚洲一二三在线| 色婷婷**av毛片一区| 不卡av电影院| 日av在线播放中文不卡| 国产日韩欧美黄色| 国产成人精品一区| 青青久久aⅴ北条麻妃| 久久99热精品| 亚洲精品动漫100p| 一区二区在线视频| 欧美日韩国产限制| 日韩毛片在线观看| 成人欧美在线观看| 久久视频在线免费观看| 97在线日本国产| 亚洲专区中文字幕| 久久久国产视频91| 国内精品久久久| 国产午夜精品美女视频明星a级| 91午夜理伦私人影院| 久久精品在线播放| 国产精品视频中文字幕91| 国产黑人绿帽在线第一区| 在线观看亚洲视频| 亚洲影院高清在线| 欧美亚洲国产成人精品| 伊人亚洲福利一区二区三区| 欧美激情视频一区二区三区不卡| 久久久亚洲天堂| 亚洲国产另类久久精品| 在线观看欧美www| 欧美激情一区二区三区在线视频观看| 69av成年福利视频| 日韩av在线影院| 在线a欧美视频| 91国偷自产一区二区三区的观看方式| 亚洲在线观看视频网站| 亚洲一区二区久久久久久| 日韩高清欧美高清| 中文字幕在线精品| 亚洲精品中文字幕女同| 欧美成人精品一区二区| 国产精品美腿一区在线看| 欧美成人免费一级人片100| 欧美性猛交xxxx乱大交| 欧美一区二区三区精品电影| 欧美激情欧美狂野欧美精品| 欧美最猛性xxxxx免费| 精品露脸国产偷人在视频| 91免费高清视频| 亚洲视频在线观看视频| 精品国产精品三级精品av网址| 91在线观看免费高清完整版在线观看| 国产噜噜噜噜噜久久久久久久久| 日韩精品亚洲精品| www.欧美精品一二三区| 国内精品模特av私拍在线观看| 欧美激情精品在线| 91精品久久久久久综合乱菊| 欧美激情精品久久久久久久变态| 亚洲综合在线小说| 亚洲欧美精品中文字幕在线| 性欧美视频videos6一9| 国产在线拍揄自揄视频不卡99| 国产精品人人做人人爽| 欧洲亚洲妇女av| 欧美日韩一区二区三区| 亚洲久久久久久久久久久| 欧美大片va欧美在线播放| 91成人国产在线观看| 亚洲色图15p| 欧美成人精品xxx| 欧美电影免费观看电视剧大全| 久久免费观看视频| 欧美黑人性猛交| 欧美巨猛xxxx猛交黑人97人| 欧美日韩在线看| 成人www视频在线观看| 不用播放器成人网| 国产三级精品网站| 最好看的2019的中文字幕视频| 成人妇女免费播放久久久| 日本中文字幕不卡免费| 日韩高清电影好看的电视剧电影| 91理论片午午论夜理片久久| 亚洲欧美国产日韩中文字幕|