婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖

如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖

熱門(mén)標(biāo)簽:玄武湖地圖標(biāo)注 太原營(yíng)銷(xiāo)外呼系統(tǒng) 竹間科技AI電銷(xiāo)機(jī)器人 地圖標(biāo)注費(fèi)用 西藏教育智能外呼系統(tǒng)價(jià)格 地圖標(biāo)注如何即時(shí)生效 最簡(jiǎn)單的百度地圖標(biāo)注 百度商家地圖標(biāo)注怎么做 小紅書(shū)怎么地圖標(biāo)注店

如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖

在分布式場(chǎng)景下,有很多種情況都需要實(shí)現(xiàn)最終一致性。在設(shè)計(jì)遠(yuǎn)程上下文的領(lǐng)域事件的時(shí)候,為了保證最終一致性,在通過(guò)領(lǐng)域事件進(jìn)行通訊的方式中,可以共享存儲(chǔ)(領(lǐng)域模型和消息的持久化數(shù)據(jù)源),或者做全局XA事務(wù)(兩階段提交,數(shù)據(jù)源可分開(kāi)),也可以借助消息中間件(消費(fèi)者處理需要能冪等)。通過(guò)Observer模式來(lái)發(fā)布領(lǐng)域事件可以提供很好的高并發(fā)性能,并且事件存儲(chǔ)也能追溯更小粒度的事件數(shù)據(jù),使各個(gè)應(yīng)用系統(tǒng)擁有更好的自治性。

1.分布式鎖

分布式鎖一般用在分布式系統(tǒng)或者多個(gè)應(yīng)用中,用來(lái)控制同一任務(wù)是否執(zhí)行或者任務(wù)的執(zhí)行順序。在項(xiàng)目中,部署了多個(gè)tomcat應(yīng)用,在執(zhí)行定時(shí)任務(wù)時(shí)就會(huì)遇到同一任務(wù)可能執(zhí)行多次的情況,我們可以借助分布式鎖,保證在同一時(shí)間只有一個(gè)tomcat應(yīng)用執(zhí)行了定時(shí)任務(wù)。

2.分布式鎖的實(shí)現(xiàn)方式

  • 使用redis的setnx()和expire()
  • 使用redis的getset()
  • 使用zookeeper的創(chuàng)建節(jié)點(diǎn)node
  • 使用zookeeper的創(chuàng)建臨時(shí)序列節(jié)點(diǎn)

3.使用redis的setnx()和expire()來(lái)實(shí)現(xiàn)分布式鎖

setnx(key,value) 如果key不存在,設(shè)置為當(dāng)前key的值為value;如果key存在,直接返回。
expire()來(lái)設(shè)置超時(shí)時(shí)間

定義注解類(lèi):

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

定時(shí)任務(wù)增加注解@Lockable:

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

定義一個(gè)aop切面LockAspect,使用@Around處理所有注解為@Lockable的方法,通過(guò)連接點(diǎn)確認(rèn)此注解是用在方法上,通過(guò)方法獲取注解信息,使用setIfAbsent來(lái)判斷是否獲取分布式鎖,如果沒(méi)有獲取分布式鎖,直接返回;如果獲取到分布式鎖,通過(guò)expire設(shè)置過(guò)期時(shí)間,并調(diào)用指定方法。

@Component
@Slf4j
@Aspect
public class LockAspect {

  @Autowired
  private RedisTemplate redisTemplate;

  @Around("@annotation(com.records.aop.Lockable)")
  public Object distributeLock(ProceedingJoinPoint pjp) {
    Object resultObject = null;

    //確認(rèn)此注解是用在方法上
    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();

    // 分布式鎖,如果沒(méi)有此key,設(shè)置此值并返回true;如果有此key,則返回false
    boolean result = redisTemplate.boundValueOps(key).setIfAbsent(value);
    if (!result) {
      //其他程序已經(jīng)獲取分布式鎖
      return resultObject;
    }

    //設(shè)置過(guò)期時(shí)間,默認(rèn)一分鐘
    redisTemplate.boundValueOps(key).expire(expire, TimeUnit.SECONDS);

    try {
      resultObject = pjp.proceed(); //調(diào)用對(duì)應(yīng)方法執(zhí)行
    } catch (Throwable throwable) {
      throwable.printStackTrace();
    }
    return resultObject;
  }
}

4.使用redis的getset()來(lái)實(shí)現(xiàn)分布式鎖

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

5.使用zookeeper的創(chuàng)建節(jié)點(diǎn)node

使用zookeeper創(chuàng)建節(jié)點(diǎn)node,如果創(chuàng)建節(jié)點(diǎn)成功,表示獲取了此分布式鎖;如果創(chuàng)建節(jié)點(diǎn)失敗,表示此分布式鎖已經(jīng)被其他程序占用(多個(gè)程序同時(shí)創(chuàng)建一個(gè)節(jié)點(diǎn)node,只有一個(gè)能夠創(chuàng)建成功)

6.使用zookeeper的創(chuàng)建臨時(shí)序列節(jié)點(diǎn)

使用zookeeper創(chuàng)建臨時(shí)序列節(jié)點(diǎn)來(lái)實(shí)現(xiàn)分布式鎖,適用于順序執(zhí)行的程序,大體思路就是創(chuàng)建臨時(shí)序列節(jié)點(diǎn),找出最小的序列節(jié)點(diǎn),獲取分布式鎖,程序執(zhí)行完成之后此序列節(jié)點(diǎn)消失,通過(guò)watch來(lái)監(jiān)控節(jié)點(diǎn)的變化,從剩下的節(jié)點(diǎn)的找到最小的序列節(jié)點(diǎn),獲取分布式鎖,執(zhí)行相應(yīng)處理,依次類(lèi)推......

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

您可能感興趣的文章:
  • C# 實(shí)現(xiàn)Zookeeper分布式鎖的參考示例
  • 分布式鎖為什么要選擇Zookeeper而不是Redis?看完這篇你就明白了
  • ZooKeeper 實(shí)現(xiàn)分布式鎖的方法示例
  • 淺談Java(SpringBoot)基于zookeeper的分布式鎖實(shí)現(xiàn)
  • 淺談分布式鎖的幾種使用方式(redis、zookeeper、數(shù)據(jù)庫(kù))
  • zookeeper實(shí)現(xiàn)分布式鎖
  • java使用zookeeper實(shí)現(xiàn)的分布式鎖示例
  • 分析ZooKeeper分布式鎖的實(shí)現(xiàn)

標(biāo)簽:唐山 廣東 香港 澳門(mén) 景德鎮(zhèn) 林芝 贛州 揚(yáng)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖》,本文關(guān)鍵詞  如何,操作,Redis,和,zookeeper,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于如何操作Redis和zookeeper實(shí)現(xiàn)分布式鎖的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品国产制服丝袜高跟| 日韩一区在线播放| 亚洲成人免费影院| 日韩码欧中文字| 国产成人99久久亚洲综合精品| 欧美亚一区二区| 亚洲色图19p| 国产老女人精品毛片久久| 欧美欧美欧美欧美首页| 中文字幕五月欧美| 国产98色在线|日韩| 久久这里只有精品视频网| 另类调教123区| 久久久午夜精品理论片中文字幕| 天天av天天翘天天综合网色鬼国产 | 色综合一区二区| 综合久久久久久久| 久久精品国产精品亚洲综合| 日韩久久精品一区| 亚洲妇熟xx妇色黄| 久久综合中文字幕| 91看片淫黄大片一级在线观看| 国产精品久久久久久久久免费桃花 | 国产偷v国产偷v亚洲高清| 国产成人免费视频一区| 日韩一区二区三| 福利电影一区二区三区| 337p亚洲精品色噜噜噜| 欧美视频中文字幕| 欧美色男人天堂| 色诱亚洲精品久久久久久| 成人精品视频一区二区三区尤物| 日本不卡一二三区黄网| 日韩制服丝袜先锋影音| 精品中文字幕一区二区| 韩国成人在线视频| 国产乱码精品一区二区三区av | 日韩免费视频一区| 免费成人在线观看| 一区二区三区蜜桃| 亚洲精品中文在线观看| 一区在线中文字幕| 国产日本欧美一区二区| 日韩一区二区在线看| 亚洲精品在线免费播放| 欧美久久久久久久久久| 欧美三级日韩三级| 在线播放一区二区三区| 欧美综合欧美视频| 欧美久久久久久久久| 日韩精品专区在线影院观看| 制服丝袜av成人在线看| 欧美电视剧在线看免费| 91精品国产色综合久久不卡电影 | 久久99久久99精品免视看婷婷 | 亚洲精品水蜜桃| 国产精品欧美极品| 国产精品每日更新在线播放网址| 久久精品男人天堂av| 国产精品久久久久一区二区三区 | 欧美综合久久久| 亚洲最大色网站| 久久一日本道色综合| 黄色日韩网站视频| 91免费国产在线| 日本不卡123| 天天综合天天做天天综合| 在线观看国产精品网站| 久久99精品国产.久久久久久 | 99这里只有精品| 亚洲一区二区偷拍精品| 在线免费亚洲电影| 国产精品99久久久久久有的能看 | 欧美综合天天夜夜久久| 91精品国产入口| 国产午夜精品一区二区三区嫩草 | 国内外精品视频| 成人久久久精品乱码一区二区三区 | 欧美性大战久久久| 中文av一区二区| 国产精品综合av一区二区国产馆| 欧美精品一二三区| 亚洲自拍与偷拍| av不卡在线观看| 中文字幕日本乱码精品影院| 久久aⅴ国产欧美74aaa| 69精品人人人人| 久久狠狠亚洲综合| 欧美一区二区免费视频| 亚洲三级小视频| 亚洲欧洲一区二区三区| 一区二区三区精品视频| av男人天堂一区| 国产精品美女久久福利网站| 成人在线综合网| 日韩一区二区三区av| 男女激情视频一区| 91精品国产综合久久久蜜臀图片| 亚洲国产成人tv| 日韩一区二区精品在线观看| 欧洲另类一二三四区| 久久99精品久久久久久久久久久久| 久久综合久久综合亚洲| 欧美日韩一区在线观看| 国产成人亚洲综合a∨婷婷| 1024国产精品| 国产日韩三级在线| 6080yy午夜一二三区久久| 国产成人精品亚洲日本在线桃色| 国产精品无人区| 精品久久久久久久久久久久久久久久久| 成人午夜激情影院| 国内久久婷婷综合| 石原莉奈在线亚洲二区| 在线视频观看一区| 亚洲一区电影777| 成人欧美一区二区三区小说| 91色婷婷久久久久合中文| 一区二区三区四区激情| 亚洲欧洲成人精品av97| 91精品视频网| 欧美日韩一区中文字幕| 亚洲一区二区影院| 亚洲女人****多毛耸耸8| 精品国产91久久久久久久妲己| www.亚洲在线| 日日噜噜夜夜狠狠视频欧美人| 欧美日韩国产bt| 国产乱码精品一区二区三区五月婷| 国产精品人人做人人爽人人添| 日韩免费观看高清完整版在线观看| 日本精品视频一区二区| 亚洲第一狼人社区| 亚洲免费av高清| 偷拍一区二区三区| 免费国产亚洲视频| 精品一区二区三区在线播放视频 | 青椒成人免费视频| 国产成人午夜99999| 精品一区二区在线免费观看| 精品中文av资源站在线观看| 成人免费一区二区三区视频| 蜜臀va亚洲va欧美va天堂| 日本三级亚洲精品| 国产麻豆精品一区二区| 国产毛片精品视频| 欧美性猛片xxxx免费看久爱| 91精品办公室少妇高潮对白| 欧美人妖巨大在线| 26uuu精品一区二区在线观看| 国产欧美精品日韩区二区麻豆天美| 国产午夜一区二区三区| 亚洲成人一区二区| 成人美女视频在线观看18| 在线一区二区三区| 久久青草欧美一区二区三区| 亚洲国产中文字幕| 亚洲一区二区视频| 亚洲欧美偷拍另类a∨色屁股| 国产成人精品免费视频网站| 欧洲中文字幕精品| 久久精品99国产精品日本| 免费成人av资源网| 亚洲一区二区美女| 欧美高清性hdvideosex| 久久国产成人午夜av影院| 亚洲一区二区三区美女| 欧美一区午夜视频在线观看 | 不卡一区在线观看| 一区二区三区四区在线免费观看 | jlzzjlzz亚洲女人18| 日韩电影免费在线| 一本色道久久加勒比精品| 亚洲一区影音先锋| 精品va天堂亚洲国产| 国产中文字幕一区| 亚洲成人综合在线| 亚洲欧洲色图综合| 久久综合狠狠综合久久综合88 | 日韩一区二区影院| 91精品国产福利| 99精品国产99久久久久久白柏 | 91丨porny丨国产入口| 亚洲桃色在线一区| 精品国产三级a在线观看| 欧美专区日韩专区| 国内精品伊人久久久久av影院 | 国产在线播放一区| 国产suv一区二区三区88区| 久久精品国产一区二区三| 亚洲成人777| 成年人国产精品| 91色porny| 一道本成人在线| 日韩一区二区在线看片| 精品国产91久久久久久久妲己 | 欧美图区在线视频| 久久精品无码一区二区三区| 视频在线观看国产精品| 国产亚洲欧美一区在线观看|