成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例

Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例

熱門標(biāo)簽:地圖標(biāo)注工廠入駐 一個(gè)地圖標(biāo)注多少錢 四川穩(wěn)定外呼系統(tǒng)軟件 臺(tái)灣電銷 高碑店市地圖標(biāo)注app b2b外呼系統(tǒng) 廊坊外呼系統(tǒng)在哪買 400電話辦理的口碑 南京手機(jī)外呼系統(tǒng)廠家

在集群下,經(jīng)常會(huì)因?yàn)橥瑫r(shí)處理發(fā)生資源爭(zhēng)搶和并發(fā)問題,但是我們都知道同步鎖 synchronized 、 cas 、 ReentrankLock 這些鎖的作用范圍都是 JVM ,說白了在集群下沒啥用。這時(shí)我們就需要能在多臺(tái) JVM 之間決定執(zhí)行順序的鎖了,現(xiàn)在分布式鎖主要有 redis 、 Zookeeper 實(shí)現(xiàn)的,還有數(shù)據(jù)庫(kù)的方式,不過性能太差,也就是需要一個(gè)第三方的監(jiān)管。

背景

最近在做一個(gè)消費(fèi) Kafka 消息的時(shí)候發(fā)現(xiàn),由于線上的消費(fèi)者過多,經(jīng)常會(huì)遇到,多個(gè)機(jī)器同時(shí)處理一個(gè)主鍵類型的數(shù)據(jù)的情況發(fā)生,如果最后是執(zhí)行更新操作的話,也就是一個(gè)更新順序的問題,但是如果恰好都需要插入數(shù)據(jù)的時(shí)候,會(huì)出現(xiàn)主鍵重復(fù)的問題。這是生產(chǎn)上不被允許的(因?yàn)楣居挟惓1O(jiān)管的機(jī)制,扣分啥的),這是就需要個(gè)分布式鎖了,斟酌后用了 Redis 的實(shí)現(xiàn)方式(因?yàn)榫W(wǎng)上例子多)

分析

redis 實(shí)現(xiàn)的分布式鎖,實(shí)現(xiàn)原理是 set 方法,因?yàn)槎鄠€(gè)線程同時(shí)請(qǐng)求的時(shí)候,只有一個(gè)線程可以成功并返回結(jié)果,還可以設(shè)置有效期,來避免死鎖的發(fā)生,一切都是這么的完美,不過有個(gè)問題,在 set 的時(shí)候,會(huì)直接返回結(jié)果,成功或者失敗,不具有阻塞效果,需要我們自己對(duì)失敗的線程進(jìn)程處理,有兩種方式

  • 丟棄
  • 等待重試 由于我們的系統(tǒng)需要這些數(shù)據(jù),那么只能重新嘗試獲取。這里使用 redis 的 List 類型實(shí)現(xiàn)等待序列的作用

代碼

直接上代碼 其實(shí)直接redis的工具類就可以解決了

package com.test
import redis.clients.jedis.Jedis;

import java.util.Collections;
import java.util.List;

/**
 * @desc redis隊(duì)列實(shí)現(xiàn)方式
 * @anthor 
 * @date 
 **/
public class RedisUcUitl {

  private static final String LOCK_SUCCESS = "OK";
  private static final String SET_IF_NOT_EXIST = "NX";
  private static final String SET_WITH_EXPIRE_TIME = "PX";

  private static final Long RELEASE_SUCCESS = 1L;

  private RedisUcUitl() {

  }
  /**
   * logger
   **/

  /**
   * 存儲(chǔ)redis隊(duì)列順序存儲(chǔ) 在隊(duì)列首部存入
   *
   * @param key  字節(jié)類型
   * @param value 字節(jié)類型
   */
  public static Long lpush(Jedis jedis, final byte[] key, final byte[] value) {

    return jedis.lpush(key, value);
  
  }

  /**
   * 移除列表中最后一個(gè)元素 并將改元素添加入另一個(gè)列表中 ,當(dāng)列表為空時(shí) 將阻塞連接 直到等待超時(shí)
   *
   * @param srckey
   * @param dstkey
   * @param timeout 0 表示永不超時(shí)
   * @return
   */
  public static byte[] brpoplpush(Jedis jedis,final byte[] srckey, final byte[] dstkey, final int timeout) {

    return jedis.brpoplpush(srckey, dstkey, timeout);

  }

  /**
   * 返回制定的key,起始位置的redis數(shù)據(jù)
   * @param redisKey
   * @param start
   * @param end -1 表示到最后
   * @return
   */
  public static Listbyte[]> lrange(Jedis jedis,final byte[] redisKey, final long start, final long end) {
    
    return jedis.lrange(redisKey, start, end);
  }

  /**
   * 刪除key
   * @param redisKey
   */
  public static void delete(Jedis jedis, final byte[] redisKey) {
    
     return jedis.del(redisKey);
  }

  /**
   * 嘗試加鎖
   * @param lockKey key名稱
   * @param requestId 身份標(biāo)識(shí)
   * @param expireTime 過期時(shí)間
   * @return
   */
  public static boolean tryGetDistributedLock(Jedis jedis,final String lockKey, final String requestId, final int expireTime) {
    String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
    return LOCK_SUCCESS.equals(result);

  }

  /**
   * 釋放鎖
   * @param lockKey key名稱
   * @param requestId 身份標(biāo)識(shí)
   * @return
   */
  public static boolean releaseDistributedLock(Jedis jedis,final String lockKey, final String requestId) {
    final String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
    jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));

    return RELEASE_SUCCESS.equals(result);

  }
}

業(yè)務(wù)邏輯主要代碼如下

1.先消耗隊(duì)列中的

while(true){
  // 消費(fèi)隊(duì)列
  try{
    // 被放入redis隊(duì)列的數(shù)據(jù) 序列化后的
    byte[] bytes = RedisUcUitl.brpoplpush(keyStr.getBytes(UTF_8), dstKeyStr.getBytes(UTF_8), 1);
    if(bytes == null || bytes.isEmpty()){
      // 隊(duì)列中沒數(shù)據(jù)時(shí)退出
      break;
    }
    // 反序列化對(duì)象
    MapString, Object> singleMap = (MapString, Object>) ObjectSerialUtil.bytesToObject(bytes);
    // 塞入唯一的值 防止被其他線程誤解鎖
    String requestId = UUID.randomUUID().toString();
    boolean lockGetFlag = RedisUcUitl.tryGetDistributedLock(keyStr,requestId, 100);
    if(lockGetFlag){
      // 成功獲取鎖 進(jìn)行業(yè)務(wù)處理
      //TODO
      // 處理完畢釋放鎖 
      boolean freeLock = RedisUcUitl.releaseDistributedLock(keyStr, requestId);

    }else{
      // 未能獲得鎖放入等待隊(duì)列
     RedisUcUitl.lpush(keyStr.getBytes(UTF_8), ObjectSerialUtil.objectToBytes(param));
  
    }
    
  }catch(Exception e){
    break;
  }
  
}

2.處理最新接到的數(shù)據(jù)

同樣是走嘗試獲取鎖,獲取不到放入隊(duì)列的流程

一般序列化用 fastJson 之列的就可以了,這里用的是 JDK 自帶的,工具類如下

public class ObjectSerialUtil {

  private ObjectSerialUtil() {
//    工具類
  }

  /**
   * 將Object對(duì)象序列化為byte[]
   *
   * @param obj 對(duì)象
   * @return byte數(shù)組
   * @throws Exception
   */
  public static byte[] objectToBytes(Object obj) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    oos.writeObject(obj);
    byte[] bytes = bos.toByteArray();
    bos.close();
    oos.close();
    return bytes;
  }


  /**
   * 將bytes數(shù)組還原為對(duì)象
   *
   * @param bytes
   * @return
   * @throws Exception
   */
  public static Object bytesToObject(byte[] bytes) {
    try {
      ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
      ObjectInputStream ois = new ObjectInputStream(bin);
      return ois.readObject();
    } catch (Exception e) {
      throw new BaseException("反序列化出錯(cuò)!", e);
    }
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Redis分布式鎖的正確實(shí)現(xiàn)方法總結(jié)
  • Redis分布式鎖的實(shí)現(xiàn)方式(redis面試題)
  • SpringBoot使用Redisson實(shí)現(xiàn)分布式鎖(秒殺系統(tǒng))
  • SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例
  • Java Redis分布式鎖的正確實(shí)現(xiàn)方式詳解
  • redis分布式鎖的問題與解決方法
  • 淺談Redis分布式鎖的正確實(shí)現(xiàn)方式
  • 單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析

標(biāo)簽:畢節(jié) 南寧 伊春 泰州 河源 拉薩 定州 甘南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例》,本文關(guān)鍵詞  Redis,實(shí)現(xiàn),分布式,鎖,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Redis實(shí)現(xiàn)分布式鎖和等待序列的方法示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    午夜视频网站在线观看| 精品处破学生在线二十三| 国产妇女馒头高清泬20p多| 国产精品一区二区三区av| 四虎成人精品免费影院| 欧美极品美女视频网站在线观看免费| 亚洲a在线观看| 国产成人精品在线播放| 成人有码视频在线播放| 午夜在线观看免费一区| 91精品久久久| 欧美精品在线观看91| 欧美日韩第一区| 精品久久久久久久中文字幕| 国产一区视频在线看| 91美女片黄在线观| 欧美视频综合| 久久久久久久久蜜桃| 最新日韩三级| www.欧美日本| 成年丰满熟妇午夜免费视频| 亚州视频一区二区三区| 久久久久99精品成人片试看| 偷偷色噜狠狠狠狠的777米奇| 欧美a级片免费看| 在线观看免费播放网址成人| 亚洲va在线va天堂| 欧美专区第二页| 亚洲人人夜夜澡人人爽| 特黄特色特刺激视频免费播放| 欧美日韩国产一区二区| 亚洲第一综合天堂另类专| 狠狠人妻久久久久久综合| 国产一区二区黄色| 亚洲免费视频网| 国产精品国码视频| 在线观看成人一级片| 亚洲一区精品在线| 欧美精品一区二区三区精品| 男人猛进猛出女人屁股视频| 色吊丝中文字幕| 99一区二区三区| 范冰冰一级做a爰片久久毛片| 欧美亚洲视频在线观看| 国产做a爰片久久毛片| 伊人伊成久久人综合网小说| 中文久久久久久| av免费观看久久| 国产欧美三级电影| 国产在线免费视频| 日韩欧美国产一区在线观看| 一级日韩一级欧美| 日韩欧美在线综合网| 久久99久久99精品免费看小说| 在线免费观看成年人视频| 中文字幕在线第一页| 亚洲精品中文字幕在线播放| 一级网站免费观看| 欧美中文字幕视频在线观看| 亚洲高清免费在线观看| 国产情侣久久久久aⅴ免费| 亚洲精品第三页| 欧美日韩国产一区二区三区地区| 成人免费观看49www在线观看| 国产成人精品最新| 亚洲三区视频| 精品国产乱码久久久久久影片| 亚洲国产欧美一区二区三区同亚洲| 一级黄色香蕉视频| **女人18毛片一区二区| 天堂在线中文资源| 亚洲欧洲日韩av| 日韩少妇裸体做爰视频| 久久亚洲成人| 99pao成人国产永久免费视频| 国产亚洲精久久久久久| 99热都是精品| 国产a视频免费观看| 国产三级香港三韩国三级| 吴梦梦av在线| 色婷婷免费视频| 中文字幕永久免费| 免费久久99精品国产自| 91九色porn在线资源| 国产精品一区二区在线观看网站| 国产中文欧美日韩在线| 顶级嫩模一区二区三区| 黄一区二区三区| 911国产精品| 亚洲精选成人| 色中色综合成人| 亚洲美女在线视频| 精品日本一区二区| 精品无码人妻一区二区三区品| 美女一区视频| 亚洲国产精品yw在线观看| 精品福利视频一区二区三区| 日韩欧美一区二区久久婷婷| 网站永久看片免费| 色综合影院在线观看| 亚洲不卡av一区二区三区| 日韩久久久久久久久久久久| 大胆亚洲人体视频| 亚洲乱熟女一区二区| 亚洲精品一区二区在线观看| 日本午夜在线视频| 亚洲不卡的av| 人成免费在线视频| 操一操视频一区| 夜夜嗨av一区二区三区网页| 麻豆国产一区| 无人区乱码一区二区三区| 国产亚洲精品一区二555| 一二三区在线| 激情亚洲综合在线| 尤物视频在线观看网站| 成人免费视频视频在| 成人xvideos免费视频| 国产精品美女视频| 不卡av在线网| 奇米影视第四色7777| 黄色激情在线视频| 偷拍25位美女撒尿视频在线观看| 国内精品久久久久国产盗摄免费观看完整版| 区一区二区三区中文字幕| 超碰caoporn久久| 三级视频网站在线| 国产极品美女到高潮| 在线观看日韩高清av| www久久日com| 99久久婷婷国产综合精品电影| 91精品国产91久久久久| 国产h视频在线播放| 极品av少妇一区二区| 中文字幕一区在线| 久久精品国产亚洲av无码娇色| 69精品视频| 韩国一区二区视频| 国产福利第一视频在线播放| 2024最新电影免费在线观看| 国产+高潮+白浆+无码| 国产热re99久久6国产精品| a天堂在线观看视频| www.九九热.com| 91免费精品国偷自产在线在线| 欧美三级网址| 国产麻豆电影在线观看| 国产传媒欧美日韩| 三级av免费看| 国产精品夜夜夜爽张柏芝| 亚洲高清电影| 日本桃色视频| 四虎影视免费看电影| 成人免费在线小视频| 色综合色综合色综合色综合色综合| www 四虎| 日本高清视频一区| 91美女视频| 久章草在线视频| 一区二区在线观看免费视频| 裸模一区二区三区免费| 欧美大片免费| 91白丝在线| 国产精品萝li| 日韩一区不卡| 99热都是精品| 亚洲欧美一区二区三| 东京热加勒比无码少妇| 国产99对白在线播放| 你懂的免费在线观看视频网站| 色在线免费观看| 天天操精品视频| 亚洲av无码一区二区二三区| 国产精品久久亚洲7777| 欧洲美女女同性互添| 一道精品视频一区二区三区图片| 9自拍视频在线观看| 国内久久精品| 精品久久ai电影| 色综合久久久久久中文网| 黄瓜视频在线免费观看| 欧美成a人片免费观看久久五月天| 国产午夜精品美女毛片视频| 亚洲精品日韩精品| 国内精品一区视频| 日韩欧美一级二级| www.com亚洲| 欧美日韩亚洲国产综合| 欧美综合色免费| 色天下一区二区三区| 亚洲亚洲人成综合网络| 丰满熟妇人妻中文字幕| 国产69精品久久久久9999人| 视频一区欧美| 久久久国产精彩视频美女艺术照福利| 亚洲一区免费视频| 九九热只有精品| 一区二区三区免费| 91免费版网站在线观看| 99re免费99re在线视频手机版| 国产一区精品福利| 日韩午夜视频在线观看| 九九热精彩视频| 舐め犯し波多野结衣在线观看| 99精品人妻少妇一区二区| 欧洲亚洲精品| 7878视频在线观看| 久久精品久久久久| 在线香蕉视频| 亚洲欧美国内爽妇网| 看片网址国产福利av中文字幕| 午夜一级在线看亚洲| 欧美日韩亚洲综合在线| 日韩精品a在线观看91| 亚洲精品第二页| 亚洲国产一区二区视频| 在线看av的网址| 日本肉体xxxx裸体784大胆| 欧洲成人综合网| 国内自拍视频在线观看| 久久黄色免费视频| 日本少妇高潮喷水xxxxxxx| 黄页网站大全在线免费观看| 亚洲美女中文字幕| 狠狠色综合网站久久久久久久| 欧美在线1区| 五月天婷婷久久| 99鲁鲁精品一区二区三区| 99久久婷婷国产综合| 国产精品二线| 欧美极品另类| 欧美精品国产精品久久久| 国产精品扒开腿做爽爽| 午夜成年人在线免费视频| 美女福利一区二区三区| 97人妻精品一区二区三区软件| 久久久久久久久久国产精品| 99视频热这里只有精品免费| 国产欧美日韩视频一区二区| 视频在线观看入口黄最新永久免费国产| 国产成+人+综合+亚洲欧美| 欧美一区二区三区精美影视| 污污视频网站在线| 国产稀缺真实呦乱在线| 久久夜色精品国产噜噜av| 日本免费在线视频不卡一不卡二| 国产日本欧美一区二区三区| www.日韩在线观看| av在线不卡顿| 国产午夜精品久久久久久免费视| 亚洲综合视频网站| 亚洲福利专区| www.cao超碰| 久久久久久久香蕉网| 久久国产免费看| av电影网站在线观看| 美女视频黄的免费| 国产精品欧美一区二区| 亚洲www啪成人一区二区麻豆| 亚洲av毛片在线观看| 欧美xxxx黑人又粗又长精品| 欧美福利在线播放网址导航| 欧美激情精品久久久六区热门| 波霸ol色综合久久| 日韩肉感妇bbwbbwbbw| 欧美日韩在线网站| av电影资源| 国产特级黄色录像| 亚洲韩国一区二区三区| 2020日本不卡一区二区视频| 一道本一区二区| 黄色网在线播放| 欧美一级理论片| 欧美一级专区免费大片| 国产精品久久久久久久久免费高清| 午夜18视频在线观看| 亚洲欧洲国产日韩| 欧美亚洲三区| 国产精品字幕| 日韩在线中文字幕| 久9re热视频这里只有精品| 精品国产免费观看| 日韩中文字幕高清在线观看| 午夜少妇久久久久久久久| 91亚洲精华国产精华| 久久人人97超碰com| 久久一区二区三区欧美亚洲| 日本激情视频网| 亚洲v精品v日韩v欧美v专区| 偷拍自拍一区| 在线亚洲自拍| av免费高清观看| 国产超碰在线观看| 国产精品永久免费观看| 911av视频| 日本视频在线观看一区二区三区| 一级黄色免费在线观看| 久久99九九99精品| 国产原创视频在线观看| 国产91精品在线观看| 亚洲经典一区| 亚洲欧美99| 国产精品一区二区三区乱码| 欧美日韩破处| 成人在线观看一区二区| 亚洲精品成人自拍| av在线电影观看| 亚洲无限乱码一二三四麻| 日韩免费毛片视频| 91美女视频网站| 黄色一级视频在线观看| 国内精品视频一区| 在线免费观看h视频| 日本不卡免费高清视频| 国产精选久久| 亚洲日韩中文字幕一区| av综合网址| 日韩电影大全在线观看| 国产精品第一区| 麻豆视频在线看| 宅男噜噜噜66国产免费观看| 亚洲国产精品精华液网站| 老汉色老汉首页av亚洲| 男人的天堂久久久| 成人在线观看a| 国产一区二区三区视频免费观看| 精品国产无码一区二区| 最近中文字幕在线中文高清版|