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

主頁(yè) > 知識(shí)庫(kù) > 基于Redis分布式鎖的實(shí)現(xiàn)代碼

基于Redis分布式鎖的實(shí)現(xiàn)代碼

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

概述

目前幾乎很多大型網(wǎng)站及應(yīng)用都是分布式部署的,分布式場(chǎng)景中的數(shù)據(jù)一致性問題一直是一個(gè)比較重要的話題。分布式的CAP理論告訴我們“任何一個(gè)分布式系統(tǒng)都無(wú)法同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance),最多只能同時(shí)滿足兩項(xiàng)?!彼?,很多系統(tǒng)在設(shè)計(jì)之初就要對(duì)這三者做出取舍。在互聯(lián)網(wǎng)領(lǐng)域的絕大多數(shù)的場(chǎng)景中,都需要犧牲強(qiáng)一致性來?yè)Q取系統(tǒng)的高可用性,系統(tǒng)往往只需要保證“最終一致性”,只要這個(gè)最終時(shí)間是在用戶可以接受的范圍內(nèi)即可。

在很多場(chǎng)景中,我們?yōu)榱吮WC數(shù)據(jù)的最終一致性,需要很多的技術(shù)方案來支持,比如分布式事務(wù)、分布式鎖等。

選用Redis實(shí)現(xiàn)分布式鎖原因

Redis有很高的性能

Redis命令對(duì)此支持較好,實(shí)現(xiàn)起來比較方便

在此就不介紹Redis的安裝了。

使用命令介紹

SETNX

SETNX key val
當(dāng)且僅當(dāng)key不存在時(shí),set一個(gè)key為val的字符串,返回1;若key存在,則什么都不做,返回0。

expire

expire key timeout
為key設(shè)置一個(gè)超時(shí)時(shí)間,單位為second,超過這個(gè)時(shí)間鎖會(huì)自動(dòng)釋放,避免死鎖。

delete

delete key
刪除key

在使用Redis實(shí)現(xiàn)分布式鎖的時(shí)候,主要就會(huì)使用到這三個(gè)命令。

實(shí)現(xiàn)

使用的是jedis來連接Redis。

實(shí)現(xiàn)思想

獲取鎖的時(shí)候,使用setnx加鎖,并使用expire命令為鎖添加一個(gè)超時(shí)時(shí)間,超過該時(shí)間則自動(dòng)釋放鎖,鎖的value值為一個(gè)隨機(jī)生成的UUID,通過此在釋放鎖的時(shí)候進(jìn)行判斷。

獲取鎖的時(shí)候還設(shè)置一個(gè)獲取的超時(shí)時(shí)間,若超過這個(gè)時(shí)間則放棄獲取鎖。

釋放鎖的時(shí)候,通過UUID判斷是不是該鎖,若是該鎖,則執(zhí)行delete進(jìn)行鎖釋放。
分布式鎖的核心代碼如下:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.exceptions.JedisException;
import java.util.List;
import java.util.UUID;
/**
 * Created by liuyang on 2017/4/20.
 */
public class DistributedLock {
 private final JedisPool jedisPool;
 public DistributedLock(JedisPool jedisPool) {
 this.jedisPool = jedisPool;
 }
 /**
 * 加鎖
 * @param locaName 鎖的key
 * @param acquireTimeout 獲取超時(shí)時(shí)間
 * @param timeout 鎖的超時(shí)時(shí)間
 * @return 鎖標(biāo)識(shí)
 */
 public String lockWithTimeout(String locaName,
     long acquireTimeout, long timeout) {
 Jedis conn = null;
 String retIdentifier = null;
 try {
  // 獲取連接
  conn = jedisPool.getResource();
  // 隨機(jī)生成一個(gè)value
  String identifier = UUID.randomUUID().toString();
  // 鎖名,即key值
  String lockKey = "lock:" + locaName;
  // 超時(shí)時(shí)間,上鎖后超過此時(shí)間則自動(dòng)釋放鎖
  int lockExpire = (int)(timeout / 1000);
  // 獲取鎖的超時(shí)時(shí)間,超過這個(gè)時(shí)間則放棄獲取鎖
  long end = System.currentTimeMillis() + acquireTimeout;
  while (System.currentTimeMillis()  end) {
  if (conn.setnx(lockKey, identifier) == 1) {
   conn.expire(lockKey, lockExpire);
   // 返回value值,用于釋放鎖時(shí)間確認(rèn)
   retIdentifier = identifier;
   return retIdentifier;
  }
  // 返回-1代表key沒有設(shè)置超時(shí)時(shí)間,為key設(shè)置一個(gè)超時(shí)時(shí)間
  if (conn.ttl(lockKey) == -1) {
   conn.expire(lockKey, lockExpire);
  }
  try {
   Thread.sleep(10);
  } catch (InterruptedException e) {
   Thread.currentThread().interrupt();
  }
  }
 } catch (JedisException e) {
  e.printStackTrace();
 } finally {
  if (conn != null) {
  conn.close();
  }
 }
 return retIdentifier;
 }
 /**
 * 釋放鎖
 * @param lockName 鎖的key
 * @param identifier 釋放鎖的標(biāo)識(shí)
 * @return
 */
 public boolean releaseLock(String lockName, String identifier) {
 Jedis conn = null;
 String lockKey = "lock:" + lockName;
 boolean retFlag = false;
 try {
  conn = jedisPool.getResource();
  while (true) {
  // 監(jiān)視lock,準(zhǔn)備開始事務(wù)
  conn.watch(lockKey);
  // 通過前面返回的value值判斷是不是該鎖,若是該鎖,則刪除,釋放鎖
  if (identifier.equals(conn.get(lockKey))) {
   Transaction transaction = conn.multi();
   transaction.del(lockKey);
   ListObject> results = transaction.exec();
   if (results == null) {
   continue;
   }
   retFlag = true;
  }
  conn.unwatch();
  break;
  }
 } catch (JedisException e) {
  e.printStackTrace();
 } finally {
  if (conn != null) {
  conn.close();
  }
 }
 return retFlag;
 }
}

測(cè)試

下面就用一個(gè)簡(jiǎn)單的例子測(cè)試剛才實(shí)現(xiàn)的分布式鎖。
例子中使用50個(gè)線程模擬秒殺一個(gè)商品,使用--運(yùn)算符來實(shí)現(xiàn)商品減少,從結(jié)果有序性就可以看出是否為加鎖狀態(tài)。

模擬秒殺服務(wù),在其中配置了jedis線程池,在初始化的時(shí)候傳給分布式鎖,供其使用。

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by liuyang on 2017/4/20.
 */
public class Service {
 private static JedisPool pool = null;
 static {
 JedisPoolConfig config = new JedisPoolConfig();
 // 設(shè)置最大連接數(shù)
 config.setMaxTotal(200);
 // 設(shè)置最大空閑數(shù)
 config.setMaxIdle(8);
 // 設(shè)置最大等待時(shí)間
 config.setMaxWaitMillis(1000 * 100);
 // 在borrow一個(gè)jedis實(shí)例時(shí),是否需要驗(yàn)證,若為true,則所有jedis實(shí)例均是可用的
 config.setTestOnBorrow(true);
 pool = new JedisPool(config, "127.0.0.1", 6379, 3000);
 }
 DistributedLock lock = new DistributedLock(pool);
 int n = 500;
 public void seckill() {
 // 返回鎖的value值,供釋放鎖時(shí)候進(jìn)行判斷
 String indentifier = lock.lockWithTimeout("resource", 5000, 1000);
 System.out.println(Thread.currentThread().getName() + "獲得了鎖");
 System.out.println(--n);
 lock.releaseLock("resource", indentifier);
 }
}
// 模擬線程進(jìn)行秒殺服務(wù)

public class ThreadA extends Thread {
 private Service service;
 public ThreadA(Service service) {
 this.service = service;
 }
 @Override
 public void run() {
 service.seckill();
 }
}

public class Test {
 public static void main(String[] args) {
 Service service = new Service();
 for (int i = 0; i  50; i++) {
  ThreadA threadA = new ThreadA(service);
  threadA.start();
 }
 }
}

結(jié)果如下,結(jié)果為有序的。

若注釋掉使用鎖的部分

public void seckill() {
 // 返回鎖的value值,供釋放鎖時(shí)候進(jìn)行判斷
 //String indentifier = lock.lockWithTimeout("resource", 5000, 1000);
 System.out.println(Thread.currentThread().getName() + "獲得了鎖");
 System.out.println(--n);
 //lock.releaseLock("resource", indentifier);
}

從結(jié)果可以看出,有一些是異步進(jìn)行的。

在分布式環(huán)境中,對(duì)資源進(jìn)行上鎖有時(shí)候是很重要的,比如搶購(gòu)某一資源,這時(shí)候使用分布式鎖就可以很好地控制資源。
當(dāng)然,在具體使用中,還需要考慮很多因素,比如超時(shí)時(shí)間的選取,獲取鎖時(shí)間的選取對(duì)并發(fā)量都有很大的影響,上述實(shí)現(xiàn)的分布式鎖也只是一種簡(jiǎn)單的實(shí)現(xiàn),主要是一種思想。

下一次我會(huì)使用zookeeper實(shí)現(xiàn)分布式鎖,使用zookeeper的可靠性是要大于使用redis實(shí)現(xiàn)的分布式鎖的,但是相比而言,redis的性能更好。

上面的代碼可以在我的GitHub中進(jìn)行查看。

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

您可能感興趣的文章:
  • redis中使用java腳本實(shí)現(xiàn)分布式鎖
  • 基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列
  • 詳解Java如何實(shí)現(xiàn)基于Redis的分布式鎖
  • Redis實(shí)現(xiàn)分布式鎖的幾種方法總結(jié)
  • Redis上實(shí)現(xiàn)分布式鎖以提高性能的方案研究
  • 詳解使用Redis SETNX 命令實(shí)現(xiàn)分布式鎖
  • Redis數(shù)據(jù)庫(kù)中實(shí)現(xiàn)分布式鎖的方法
  • Redis構(gòu)建分布式鎖
  • redisson實(shí)現(xiàn)分布式鎖原理
  • 深入理解redis分布式鎖和消息隊(duì)列

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Redis分布式鎖的實(shí)現(xiàn)代碼》,本文關(guān)鍵詞  基于,Redis,分布式,鎖,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于Redis分布式鎖的實(shí)現(xiàn)代碼》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于基于Redis分布式鎖的實(shí)現(xiàn)代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷亚洲久悠悠色悠在线播放| 欧洲午夜精品久久久| 天堂在线免费av| 国精产品乱码一区一区三区四区| 亚洲色图另类小说| 一区二区日韩电影| 亚洲综合首页| 美女精品一区| 一区二区三区在线观看免费| 中文亚洲免费| 一本一生久久a久久精品综合蜜| 国产精品超碰97尤物18| 中文无码久久精品| 国语自产精品视频在线看抢先版图片| 91精品黄色| 濑亚美莉vs黑人在线观看| 成熟丰满熟妇高潮xxxxx视频| 免费在线观看的av| 亚洲国产一区二区a毛片| 日日嗨av一区二区三区四区| 91亚洲精品在线观看| 激情成人中文字幕| 久久免费视频观看| 日韩欧美高清一区二区三区| 国产精品永久免费观看| 丰满人妻一区二区三区免费视频| 国产精品久久久久影院色老大| 亚洲国产成人91porn| 国产精品每日更新| 日本一二三区视频| 国产精品一区二区av影院萌芽| 91国产视频在线| 93在线视频精品免费观看| 免费a视频在线观看| 9久久婷婷国产综合精品性色| 国产乱国产乱老熟| 蜜臀av午夜精品久久| 小说区图片区色综合区| 亚洲精品福利视频网站| 91久久高清国语自产拍| 99re8精品视频在线观看| av在线亚洲男人的天堂| 我和岳m愉情xxxⅹ视频| 亚洲激情图片网| 日本一区二区三区在线不卡| 国产精品一区二区三区观看| 欧美日本国产在线| www.黄色av| 久久精品亚洲一区二区| 亚洲高清av在线| 伊人久久精品| 哺乳挤奶一区二区三区免费看| 538prom精品视频线放| 蜜臀av性久久久久蜜臀aⅴ| 欧美精品日韩综合在线| 国产精品一区二区三区高清在线| a'aaa级片在线观看| 久久av红桃一区二区小说| 最近中文字幕免费观看| 国产精品久久久久久久第一福利| 日av在线不卡| 免费一区二区三区四区| 成全电影大全在线观看| 欧美亚洲国产另类| 免费在线观看的毛片| 久久精品久久久久久| 一区二区三区免费在线| 亚洲国产婷婷香蕉久久久久久| 国产91精品对白在线播放| 中文在线а天堂av| 欧美色老头old∨ideo| 欧美老少配视频| 精品国产乱码久久久久久浪潮| 奇米在线7777在线精品| 人妻在线日韩免费视频| 天天干天天爱天天操| 亚洲理伦在线| 亚洲青青青在线视频| 在线观看视频免费| 亚洲日本天堂| 婷婷丁香激情五月| 国产午夜在线一区二区三区| 少女频道在线观看免费播放电视剧| 国内成+人亚洲+欧美+综合在线| 中文字幕免费一区二区| 国产色视频在线播放| 无码精品一区二区三区在线播放| 日韩一区二区三区四区在线| 91免费国产精品| 欧美亚洲视频| 懂色一区二区三区av片| 国产91精品视频在线观看| 91精品免费看| 91久久精品久久国产性色也91| 午夜影院免费| 99re国产视频| 欧美黄色视屏| 国产精品探花在线| 亚洲全部视频| 国产亚洲视频在线观看| 中文字幕有码在线观看| 久久久久亚洲av片无码v| 亚洲精品日韩激情在线电影| 国产高潮又爽又无遮挡又免费| aaaaa级片| 精品国产在天天线2019| 久久久久国产精品午夜一区| 91香蕉在线视频| 在线看日韩av| 奇米色欧美一区二区三区| 成年人一级黄色片| 国产区欧美区日韩区| 不卡视频一二三四| 亚洲自拍偷拍网址| 日韩**中文字幕毛片| 亚洲一区二区三区成人| 亚洲理论在线a中文字幕| 国产免费观看久久黄| 91精品综合久久久久久| 欧美暴力调教| 久久亚洲精品成人| 在线免费看黄视频| 师生出轨h灌满了1v1| 欧美理论在线| 国产精品日本欧美一区二区三区| 国产一区二区三区免费视频| 色小子综合网| 91精品一区二区三区综合在线爱| 麻豆视频成人| 久久国产精品久久久久久| 99热这里只有精| 欧美韩国理论所午夜片917电影| h七七www色午夜日本| 免费亚洲一区二区| 91亚洲精品久久久久久久久久久久| 亚洲人成影视在线观看| 久久久久久久97| 亚洲熟女乱色一区二区三区| 偷拍夫妻性生活| 国产精品av一区| 国产成人精品一区二| 不卡av一区二区| 黄页在线观看免费| 欧美日韩国产一区在线| 久久综合88中文色鬼| 国产综合久久久久影院| 99免费看香蕉视频| 人妻无码久久一区二区三区免费| jizz大全欧美jizzcom| 奇米色在线视频| 亚洲人成网77777色在线播放| 91丨精品丨国产| 国产美女扒开尿口久久久| 乱中年女人av三区中文字幕| av网站在线免费观看| 最近中文字幕在线观看| 国产精品女主播在线观看| 香蕉久久国产av一区二区| 天堂√最新版中文在线| 亚洲精品国产精品国自| 九九热国产精品视频| 久久999免费视频| 国产成人av一区二区三区在线| 国产理论视频在线观看| 中文字幕+乱码+中文乱码91| 一道本在线免费视频| 9.1人成人免费视频网站| 韩日电影在线观看| 国产亚洲一区二区手机在线观看| 久久久久久亚洲精品不卡4k岛国| 日韩pacopacomama| 国产精品九色蝌蚪自拍| 91在线视频18| 免费不卡的av| 中文字幕一区二区三三| 青青草成人影院| 亚洲国产成人精品久久久国产成人一区| 骚虎视频欧美| 久久视频精品在线观看| www三级免费| 青青在线视频一区二区三区| 麻豆精品一二三| 伊大人久久香线焦宗合一75大| 日韩美女免费视频| 国产精品人成电影| 99这里有精品视频| 精品1卡二卡三卡四卡老狼| 亚洲欧洲国产精品| 国产成人自拍偷拍| 狠狠色综合网站久久久久久久| 成人在色线视频在线观看免费大全| 日韩伦理av| 成人在线高清免费| 日韩成人av网站| 欧美x0x0| 影音四色91| 国产精品6699| 国产成人综合精品三级| 国产情人节一区| 国产日韩欧美一区二区三区综合| 色哟哟在线观看一区二区三区| 一区二区三区视频免费观看| 91麻豆国产精品| 在线免费中文字幕| 成人中文字幕合集| 亚洲伊人影院| 亚洲美女电影在线| 在线免费成人| 精品视频123区在线观看| 91网站进入| 国产福利精品导航| 欧美午夜aaaaaa免费视频| 欧美一区观看| 国产成人超碰人人澡人人澡| 免费日韩在线观看| 野花国产精品入口| 拍拍拍无挡免费播放视频在线观看| hd国产人妖ts另类视频| 7878视频在线观看| 亚洲国产经典视频| 中文字幕在线日韩| 欧美一区二区三区……| 91探花在线观看| 欧美三级 欧美一级| 亚洲一区二区三区精品中文字幕| 国产精品无圣光一区二区| 国产精品久久久久影院日本| 丝袜人妻一区二区三区| 亚洲激情网站免费观看| 亚洲精品一区av在线播放| 成人天堂资源www在线| 国产aaa一级片| 亚洲福利视频网站| 欧美亚洲伦理www| 美国成人毛片| 国产有色视频色综合| 92久久精品一区二区| 最新天堂网www| 国产高潮av| 亚洲欧美日韩人成在线播放| 精品亚洲a∨一区二区三区18| 小说区图片区综合久久亚洲| 中文在线字幕免费观| 亚洲免费观看| 91黄色在线观看| 日本v片在线高清不卡在线观看| 92国产精品视频| 亚洲第一视频在线观看| 成人av网站免费| 天堂在线看视频| 人人澡人人澡人人看| 日韩av免费播放| 美女胸又www又黄的网站| 日韩一级片免费观看| 精品免费在线| 亚洲国产精品久久网午夜小说| 男人天堂午夜在线| 亚洲欧美视频一区二区| 国产精品99久久久久久宅男| 日本 片 成人 在线| 不卡视频在线播放| 在线观看色视频| 无码人妻少妇色欲av一区二区| 亚洲最大成人综合| 91在线|亚洲| a在线播放不卡| 欧美国产丝袜视频| 日韩成人午夜| 激情五月婷婷综合| 在线一级观看| 欧美噜噜久久久xxx| 春暖花开亚洲一区二区三区| 国产精品日韩精品| 国产欧美在线一区| 少妇一区二区三区| 欧美在线观看视频一区二区三区| 欧美一区二区三区在线观看视频| 久久aaaa片一区二区| 91久久电影| 97久久久精品综合88久久| 国产精品狠色婷| 亚洲一区电影在线观看| 97精品国产aⅴ7777| 欧美另类极品videosbest视频| 亚洲片在线观看| 中文字幕的久久| 国产精品成人午夜| 77成人影视| 亚洲第一网站| 欧洲一区二区三区免费视频| 亚洲v在线观看| 亚洲日本视频| 国产精品高精视频免费| 蜜臀久久99精品久久久久久| 亚洲欧美精品aaaaaa片| 午夜精品蜜臀一区二区三区免费| 老司机成人免费视频| 夜鲁很鲁在线视频| 久久精品男女| 久久精品www人人爽人人| 国产激情美女久久久久久吹潮| 北条麻妃一二三区| 日韩精品一区二区在线播放| 国产视频1区2区3区| 日本视频一区二区在线观看| 国产视频精品在线| 国产黄色在线网站| 黄色成人免费网| 精品国产va久久久久久久| 小鲜肉gaygays免费动漫| 97中文字幕在线| 国产精品久久久久久久久久新婚| 精品国产欧美成人夜夜嗨| 97在线中文字幕| 国产精品麻豆va在线播放| 欧亚一区二区| 欧美久久高跟鞋激| 亚洲专区区免费| 亚洲精品手机在线| 国产精品视频久久久| 欧美性受ⅹ╳╳╳黑人a性爽| 国产成人精品免费视频大全软件| fc2成人免费视频| 粗大黑人巨茎大战欧美成人| 91青娱乐在线视频| 亚洲天堂网视频| 青娱乐精品视频| 亚洲天堂男人av|