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

主頁 > 知識庫 > 詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題

詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題

熱門標(biāo)簽:宿遷便宜外呼系統(tǒng)平臺 魔獸2青云地圖標(biāo)注 十堰營銷電銷機器人哪家便宜 貴州電銷卡外呼系統(tǒng) 北京400電話辦理收費標(biāo)準(zhǔn) 超呼電話機器人 山東外呼銷售系統(tǒng)招商 日本中國地圖標(biāo)注 鄭州人工智能電銷機器人系統(tǒng)

      自己的項目因為會一直抓取某些信息,但是本地會和線上經(jīng)常一起跑,造成沖突。這其實就是我們常說的分布式集群的問題了,本地和線上的服務(wù)器構(gòu)成了集群以及QPS為2的小并發(fā)(其實也不叫并發(fā),不知道拿什么詞形容?)。

     首先,分布式集群的問題大家都知道,會造成數(shù)據(jù)庫的插入重復(fù)問題,會造成一系列的并發(fā)性問題。

     解決的方式呢也大概如下幾點,百度以及谷歌上都能搜到的解決方式:

     1:數(shù)據(jù)庫添加唯一索引

     2:設(shè)計接口冪等性

     3:依靠中間件使用分布式鎖,而分布式鎖又分為Redis和Zookeeper

    由于Zookeeper我沒怎么接觸過,并且我項目中本來就引用了Redis,所以就想著用Redis來做分布式鎖,也高端洋氣上檔次點。

    首先基于Redis的操作,我們必須要保證其原子性,也就是要么全部成功,要么全部失敗,先從Redis的客戶端入手。

    就Redis客戶端而言,我們通過的操作是先使用setnx指令,如果成功則返回1,失敗則返回0

   可是就分布鎖鎖而言,一個常用的問題就是如果一個服務(wù)setnx成功了,但是在解鎖的時候如果發(fā)生了宕機或者一些特殊因素,導(dǎo)致無法解鎖,那么其他服務(wù)將陷入死鎖的狀態(tài)。所以,我們在用 setnx 的同時想著去用 expire 指令對鎖進行一個過期操作

 

   從指令可以看出 setnx 和 expire 指令是分開的,如果在這中間的空隙過程中如果有特殊因素導(dǎo)致指令無法繼續(xù),也會導(dǎo)致死鎖的產(chǎn)生。

以下參考自老錢的 Redis 深度歷險:核心原理與應(yīng)用實踐

   為了解決這個疑難,Redis 開源社區(qū)涌現(xiàn)了一堆分布式鎖的 library,專門用來解決這個問題。實現(xiàn)方法極為復(fù)雜,小白用戶一般要費很大的精力才可以搞懂。如果你需要使用分布式鎖,意味著你不能僅僅使用 Jedis 或者 redis-py 就行了,還得引入分布式鎖的 library。

  為了治理這個亂象,Redis 2.8 版本中作者加入了 set 指令的擴展參數(shù),使得 setnx 和 expire 指令可以一起執(zhí)行,徹底解決了分布式鎖的亂象。從此以后所有的第三方分布式鎖 library 可以休息了。

   

  以上都是基于Redis的操作,但是我們在JAVA中如何去運用分布式鎖呢。

  首先在Redis方面我用的是RedisTemplate對Redis進行操作的 ,而RedisTemplate在目前情況下如果不借助于是無法保證其原子性的,所以我們需要借助于Redis的Lua腳本。

   先上Lua腳本的代碼

// 加鎖
if 
    redis.call('setNx',KEYS[1],ARGV[1]) 
  then 
    if redis.call('get',KEYS[1])==ARGV[1] 
    return redis.call('expire',KEYS[1],ARGV[2]) 
  else 
    return 0 
  end 
end
 
// 解鎖
  redis.call('get', KEYS[1]) == ARGV[1] 
then 
  return redis.call('del', KEYS[1]) 
else 
  return 0 

    Java調(diào)用腳本有兩種方式

   1。新建一個腳本文件,在代碼中調(diào)用其絕對路徑地址

     redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource(地址)));

   2。在Java代碼中以字符串的方式傳入

    redisScript.setScriptText(腳本);

  我是用的第二種方式實現(xiàn)的,下面是JAVA代碼

/**
   * 獲取鎖
   * @param lockKey
   * @param value
   * @param expireTime:單位-秒
   * @return
   */
  public boolean getLock(String lockKey, String value, int expireTime){
    boolean ret = false;
    try{
      String script = "if redis.call('setNx',KEYS[1],ARGV[1]) then if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('expire',KEYS[1],ARGV[2]) else return 0 end end";
 
      RedisScriptLong> redisScript = new DefaultRedisScript>(script, Long.class);
 
      Object result = redisTemplate.execute(redisScript,new StringRedisSerializer(),new StringRedisSerializer(), Collections.singletonList(lockKey),value,expireTime + "");
      System.out.println(result + "-----------");
      //Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey),value,expireTime + "");
 
      if(SUCCESS.equals(result)){
        return true;
      }
 
    }catch(Exception e){
      e.printStackTrace();
    }
    return ret;
  }
 
  /**
   * 釋放鎖
   * @param lockKey
   * @param value
   * @return
   */
  public boolean releaseLock(String lockKey, String value){
 
    String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
 
    RedisScriptLong> redisScript = new DefaultRedisScript>(script, Long.class);
 
    Object result = redisTemplate.execute(redisScript,new StringRedisSerializer(),new StringRedisSerializer(), Collections.singletonList(lockKey),value);
    if(SUCCESS.equals(result)) {
      return true;
    }
 
    return false;
  }

   以上代碼已經(jīng)在我的項目中確切可以使用了。但是在使用的過程中遇到了許多問題。

   1:java.lang.IllegalStateException

   在返回值方面,會經(jīng)常報IllegalStateException。

RedisScriptString> redisScript = new DefaultRedisScript>(script, String.class);

   用String類型時候,經(jīng)常會報類型轉(zhuǎn)換異常。我在代碼中使用的Long類型接收該類型,在命令行中我們也看到命令行結(jié)果返回的是數(shù)字0或者1,保險起見我們也可以用Object對象來接收結(jié)果集。

 2:ERR value is not an integer or out of range

  這個問題糾結(jié)了我一個下午至少,Redis報的異常都是很深的,從跟蹤源碼的時候看到,我們在調(diào)用redisTemplate.execute的方法時候,如果不傳序列化的參數(shù)的時候,代碼默認(rèn)調(diào)用的是 Jdkserializationredisserializer 來進行序列化和反序列化操作,這是jdk自帶的序列化操作,使用該序列化的對象必須要實現(xiàn)Serializable接口。所以該序列化接口是用于對實體類的序列化。

   所以在進行 execute 操作的時候,我們傳入 Stringredisserializer,該序列化接口是專用于對字符串類型的序列化操作。具體的區(qū)別可以去這兩個類的源碼中看下他們的加密方式。 

因為時間以及個人能力的問題,對部分源碼有點未理解,所以沒有做到全方位的解讀這些異常的原因,以后有機會會將源碼細讀并分析其異常原因。

到此這篇關(guān)于詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題的文章就介紹到這了,更多相關(guān)RedisTemplate 分布式鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解redis分布式鎖的這些坑
  • 基于Redis實現(xiàn)分布式鎖的方法(lua腳本版)
  • SpringBoot之使用Redis實現(xiàn)分布式鎖(秒殺系統(tǒng))
  • 詳解Redis 分布式鎖遇到的序列化問題
  • redisson分布式鎖的用法大全
  • php基于redis的分布式鎖實例詳解
  • Redis分布式鎖升級版RedLock及SpringBoot實現(xiàn)方法
  • 利用redis實現(xiàn)分布式鎖,快速解決高并發(fā)時的線程安全問題
  • 詳解基于redis實現(xiàn)分布式鎖

標(biāo)簽:朝陽 江蘇 吉安 北京 楊凌 大慶 果洛 臺州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題》,本文關(guān)鍵詞  詳解,RedisTemplate,下,Redis,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    激情图片小说一区| 91沈先生播放一区二区| 探花国产精品| 国产911网站| 欧美性猛交xxxx富婆| 极品美乳网红视频免费在线观看| 日本网站在线免费观看| 国产精品久久久久久户外露出| 日韩精品无码一区二区三区久久久| 亚洲国产精品久久人人爱潘金莲| 91精品一区二区三区久久久久久| 91插插插插插插| 亚洲成人激情社区| av一级毛片| 伊人中文字幕在线观看| 久久精品视频99| 国产日韩一级片| 精品伦精品一区二区三区视频密桃| 国产专区视频| 欧美在线观看一区二区三区| 欧美私模裸体表演在线观看| 97精品在线播放| 可以直接在线观看的av| 麻豆明星ai换脸视频| 精品众筹模特私拍视频| 一级欧美视频| 亚洲曰本av电影| 久久99国产视频| 欧美国产精品人人做人人爱| 久久婷婷五月综合色国产香蕉| 日欧美一区二区| 国产精品影院在线观看| x88av在线| 天天干天天色天天| 国产亚洲一区精品| 成人97人人超碰人人99| 成人爱爱网址| 看全色黄大色大片免费久久久| а天堂8中文最新版在线官网| 久久久精品视频成人| 亚洲精品欧美| 国产精品久久久久久久久久久新郎| 日韩亚洲精品在线| 成人a v视频| 激情五月婷婷六月| 日本在线高清视频一区| 欧美精品videos极品| 免费短视频成人日韩| 日韩毛片无码永久免费看| 亚洲三级在线免费| 18禁裸乳无遮挡啪啪无码免费| 青青久久av| 91久久久久久久久久久久久久| 亚洲欧美日本视频在线观看| 91久久综合| 96日本xxxxxⅹxxx17| 1区2区3区在线视频| 噜噜噜躁狠狠躁狠狠精品视频| 中文字幕中文字幕在线中文字幕三区| 日韩电影在线观看完整版| 91av毛片| 97人人澡人人爽| 99久久99热这里只有精品| 日本成年免费网站| 国产中文一区二区| 久久久久亚洲av无码网站| 亚洲精品综合在线| 国产精品∨欧美精品v日韩精品| 欧美3p视频在线观看| 国产一区二区在线不卡| 久久久久中文字幕亚洲精品| 日本动漫同人动漫在线观看| 熟妇高潮一区二区| 国产精品色噜噜| 久久午夜无码鲁丝片午夜精品| 人人妻人人玩人人澡人人爽| 日韩精品一区二区三区色偷偷| 最新中文字幕2018| 国产精品青草久久久久福利99| eeuss国产一区二区三区四区| 一区二区三区性视频| 午夜亚洲福利老司机| 一区二区三区精品99久久| re久久精品视频| 日韩在线视频免费播放| 午夜免费在线观看精品视频| 精品剧情在线观看| 高清不卡日本v二区在线| 蜜桃国内精品久久久久软件9| 午夜影院韩国伦理在线| 免费精品一区| 在线观看亚洲网站| 四虎影院免费在线| 青青青国产在线观看| 少妇人妻丰满做爰xxx| 午夜精品网站| 日本在线天堂| 日韩电影中文字幕一区| 日韩欧美福利视频| 色婷婷综合久久久久久| 色中文字幕在线观看| 欧美a级一区二区| 中文字幕一区二区三区四区五区六区| 久久免费视频色| 久久久精品日韩欧美| 青青草精品视频在线观看| 国产免费1000拍拍拍| 亚洲黄色a级片| 色呦呦网站在线观看| 欧美精品一区二区三区国产精品| 男女视频在线观看免费| 人妻中文字幕一区| 国产美女无遮挡网站| 国产在线精品成人一区二区三区| 欧美成人激情| 亚洲成人免费网站| 国产91福利| 九色成人国产蝌蚪91| 一区二区三区四区在线| 国产精品久久久久久五月尺| 五月天婷婷亚洲| 中国女人内谢69xxxx免费视频| 黄视频网站免费看| 日韩不卡一区二区| 欧美区二区三区| 黄色www网站| 欧美丝袜第一区| 福利91精品一区二区三区| 一级毛片高清视频| 男女爽爽爽视频| 五月婷婷狠狠操| 日韩精品一区二区三区在线播放| 国产亚洲精品久久久久久久| 激情五月开心婷婷| 国产成人生活片| 男女猛烈无遮挡| 久久久99精品免费观看| 久久精品一区四区| 久久香蕉精品| 精品香蕉在线观看视频一| 成人精品电影在线观看| 国产91|九色| 日本aⅴ亚洲精品中文乱码| 国产乱码午夜在线视频| 伊人久久亚洲| 国产一区二区按摩在线观看| 亚洲精品7777| 一区二区三区中文字幕电影| 中文字幕综合在线| 久久综合九色综合88i| 777亚洲妇女| 日韩最新av在线| 免费在线观看亚洲视频| 国产精品视频网址| 日日夜夜操视频| 91丨九色丨蝌蚪丨老版| 国产91色在线播放| 国产精品外国| 免费成人美女在线观看.| 做爰高潮hd色即是空| 中文字幕亚洲色图| 中文字幕 人妻熟女| 第一视频专区在线| 成人自拍网站| 日韩美女免费线视频| 国产女主播在线观看| 国产精品久久久久久久久免费桃花| 麻豆精品不卡国产免费看| 欧美在线黄色| 色av男人的天堂免费在线| 亚欧激情乱码久久久久久久久| 7878成人国产在线观看| 肉肉视频在线观看| 黄页免费在线观看视频| 日韩国产一区二区三区| 福利视频在线看| 性孕妇free特大另类| 国产成人综合欧美精品久久| 97久久香蕉国产线看观看| 国产精品一区二区人妻喷水| 91丝袜脚交足在线播放| 99精品桃花视频在线观看| 99国产精品白浆在线观看免费| 国产aa精品| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 一区二区三区精密机械公司| 国内精品久久久久久久影视麻豆| 日韩免费高清视频| 天堂中文在线观看视频| 精品国产一区二区三区忘忧草| 天天躁日日躁狠狠躁免费麻豆| 国产成人精品久久亚洲高清不卡| 日本电影免费看| 亚洲大尺度在线观看| 中文在线观看免费网站| 日本一级黄视频| 欧美日韩国产成人在线观看| 91免费在线视频网站| 免费成人深夜天涯网站| 欧美日韩精品免费观看视完整| 久久人人爽爽爽人久久久| 国产极品粉嫩福利姬萌白酱| 夜色av.com| 小早川怜子一区二区三区| 成人免费网站在线观看| 亚洲深夜激情| 久久中文字幕在线视频| 久久久无码人妻精品无码| 成人sese在线| 欧美精品制服第一页| 91一区二区视频| 国产 日韩 亚洲 欧美| 加勒比婷婷色综合久久| 欧美日韩精品中文字幕| 国产亚洲精品激情久久| 精品国语对白精品自拍视| 成人午夜国产| 色综合久久久久综合体桃花网| 成人一区在线观看| 国产精品色在线| 一区二区日韩视频| 99蜜月精品久久91| 国内精品久久久久| 久久99精品久久久久久动态图| 免费看污污视频| 一区二区三区色| 久久青青草原一区二区| 日韩福利二区| 日韩综合精品| 78精品国产综合久久香蕉| 大伊人狠狠躁夜夜躁av一区| 黄页网站在线播放| 国产精品中文字幕制服诱惑| 777久久久精品| 日本亚洲一区| 亚洲911精品成人18网站| freehdxxxx| 99re国产精品| 中文字幕一区二区三区久久网站| 欧美 日韩 国产 一区二区三区| 国产视频一区二区在线播放| 青青草免费观看免费视频在线| 亚洲人成电影在在线观看网色| 日韩欧美国产综合在线| 中文字幕在线观看亚洲| 欧美国产日韩a欧美在线观看| 成人18视频免费69| 91精品视频网站| 国产视频一区二区三区在线播放| 国产精品制服诱惑| 欧美激情黄色片| 亚洲国产aⅴ精品一区二区| 国产www.大片在线| 欧美在线观看天堂一区二区三区| 中国免费黄视频| 在线不卡欧美精品一区二区三区| 欧美肉体xxxx裸体137大胆| 高清无码视频直接看| 91精品免费视频| 国产精品传媒毛片三区| 激情亚洲综合在线| 波多野结衣av在线观看| 久久国产亚洲| 久久福利影视| 网站一区二区| 精品国产1区2区| 岛国精品一区| 亚洲大肥女ass| 午夜精品影视国产一区在线麻豆| 狠狠爱综合网| 国产精品视频一区二区三区综合| 精品sm捆绑视频| 久久久久久爱| 久草在线视频网站| 国产精品熟女一区二区不卡| 99久久精品国产成人一区二区| 日韩在线中文字幕视频| 亚洲精品二区| 色综合久久99| 久久久久久毛片| 国产91在线亚洲| 婷婷六月天丁香| 五月天在线免费视频| 中文字幕伊人| 在线国产日本| 免费成人在线电影| 天堂成人免费av电影一区| 五月精品视频| 韩国中文字幕2020精品| 欧美日本在线看| 欧美人与性禽动交精品| 九色91蝌蚪在线| 天天射综合影视| 国产欧美日韩网站| 久久精品在线视频| 欧美a v在线播放| 网站免费满18成年在线观看| 黄色三级视频在线| 亚洲欧美成人综合| 天天做天天爱天天爽综合网| 在线观看不卡av| 国产伦乱精品| 91麻豆精品国产91久久久久久久久| 激情综合网最新| 国产日韩欧美中文字幕| 国产精品久久久久久久久久久久久久久久久| sihu成人| 制服丝袜亚洲色图| 青青草精品在线| 国产精品资源在线| 国产精品无码av无码| 777色狠狠一区二区三区| 久久免费99精品久久久久久| 国产精品一区二区免费| 国产精品久久一区二区三区不卡| 国产一级一级国产| 综合色天天鬼久久鬼色| 国产一区二区三区黄网站| 深夜成人福利| 国产精品美女视频| 日本熟伦人妇xxxx| 欧美日韩国产不卡| 老司机午夜精品99久久| 无码人妻精品一区二区三区温州| 欧美久久一二三四区| 色综合伊人色综合网站| 欧美妇性猛交视频| 日韩av电影免费观看高清|