日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

缓存-分布式锁-分布式锁原理与使用

發布時間:2024/4/13 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓存-分布式锁-分布式锁原理与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

怎么來實現這個分布式鎖呢?

方案一:

這種設計方案,會出現一個問題:當線程獲取到鎖,然后執行完業務邏輯,準備去刪除鎖的時候,突然服務器宕機了,會導致這個鎖一直存在,得不到釋放,會造成死鎖的情況。

解決方案就是:設置一個過期時間,即使服務器宕機不能手動釋放,也可以過期自動釋放

方案二:

解決了方案一的問題,不過,還會有問題,假如當我們獲取到鎖之后將要去設置過期時間的時候,這時候服務器宕機了,也會造成死鎖情況。

解決方案:保證獲取鎖和設置過期時間是原子性的,setnx ex命令可以保證原子性

方案三:

這種方案解決了設置鎖的原子性,但是在刪除鎖的時候,是應該直接刪除的嗎?當我們的業務執行時間很長的時候,這時候假定鎖已經過期了,別的線程獲得了鎖,先前線程執行完業務之后,去刪除鎖,就會去刪除別人的鎖

解決方案:在設置鎖的時候指定自己的UUID,執行完業務后,獲取鎖檢查是否是自己之前設置的,如果是自己設置的,就刪除,否則就跳過,在刪除鎖的時候也要保證原子性,為什么呢?假如我們獲取到這個鎖的確是我們自己之前設置的,但是在獲取值到刪除鎖中間還是有一段時間,假如這段時間,鎖失效了,別人獲取到了鎖,這時候我們還是會認為鎖是自己的,會導致誤刪。

方案四:

手動如何實現分布式鎖

實現分布式鎖的前提一定要保證在獲取到鎖+過期時間、獲取鎖+刪除鎖這兩步操作都是原子操作。

上圖就是我解決方案的流程圖。接下來就看看我代碼是怎么實現的吧。

/*** 從數據庫查詢并封裝數據::分布式鎖* @return*/ public Map<String, List<Catelog2Vo>> getCatalogJsonFromDbWithRedisLock() {//1、占分布式鎖。去redis占坑 設置過期時間必須和加鎖是同步的,保證原子性(避免死鎖)String uuid = UUID.randomUUID().toString();Boolean lock = stringRedisTemplate.opsForValue().setIfAbsent("lock", uuid, 300, TimeUnit.SECONDS);if (lock) {System.out.println("獲取分布式鎖成功...");Map<String, List<Catelog2Vo>> dataFromDb = null;try {//加鎖成功...執行業務(只允許獲取到分布式鎖的線程去數據庫中查)dataFromDb = getDataFromDb();} finally {// Lua腳本,在腳本中有兩步操作:一、獲取當前這個分布式鎖,判斷這個分布式鎖是不是我的,二、如果是我的就刪除,并返回1,否則返回0String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";//刪除鎖stringRedisTemplate.execute(new DefaultRedisScript<Long>(script, Long.class), Arrays.asList("lock"), uuid);}//先去redis查詢下保證當前的鎖是自己的//獲取值對比,對比成功刪除=原子性 lua腳本解鎖// String lockValue = stringRedisTemplate.opsForValue().get("lock");// if (uuid.equals(lockValue)) {// //刪除我自己的鎖// stringRedisTemplate.delete("lock");// }return dataFromDb;} else {System.out.println("獲取分布式鎖失敗...等待重試...");//加鎖失敗...重試機制//休眠一百毫秒try {TimeUnit.MILLISECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return getCatalogJsonFromDbWithRedisLock(); //自旋的方式} }

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的缓存-分布式锁-分布式锁原理与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av一级久久 | 爱爱视频一区二区 | 国产精品男女视频 | 国产精品成熟老女人 | ,午夜性刺激免费看视频 | 亚欧洲精品在线视频免费观看 | 插入综合网 | 日韩av一区二区在线观看 | 午夜视频h | 男人透女人免费视频 | 激情久久免费视频 | 国产成人综合精品 | 国产911| 操色网 | 久久久精选| 操操网站 | 天堂网视频 | 黑人导航 | 九九久久视频 | 国产一区亚洲一区 | 国产欧美123| 手机在线看黄色 | 国产精品成人av性教育 | 欧洲成人免费视频 | 久久精品超碰 | 黄色短视频在线观看 | 青青操91 | 欧美私人网站 | 久久精品视频9 | 黄一区二区三区 | 另类专区成人 | 不卡三区 | 91播放在线 | 在线观看日本视频 | 中文字幕亚洲精品在线观看 | 最新中文字幕久久 | 亚洲熟妇无码乱子av电影 | 99国产精品国产免费观看 | 日本成人片在线 | 九九这里只有精品视频 | 不卡av片 | 姑娘第5集在线观看免费好剧 | 自拍视频第一页 | 精品91久久久 | 日本 欧美 国产 | 国产网站免费看 | 亚洲av无码成人精品国产 | 日韩精品视频在线观看免费 | 国产夫妻一区 | 深夜福利国产 | 国产99久久久国产精品 | 福利一区二区视频 | 99热在线这里只有精品 | 久久九| 99在线视频免费观看 | 久久成人人人人精品欧 | 国产欧美在线观看 | 日韩精品无码一区二区三区 | 午夜影视剧场 | 日韩精选在线观看 | 九九热精品视频在线观看 | www.欧美精品 | 国产情侣激情自拍 | 免费的黄色网址 | 奇米在线777 | 午夜生活片 | 亚洲国产精品久久久 | 久久久久久国产精品日本 | 精品99久久 | 欧美日韩在线免费看 | 日韩午夜免费 | 日本体内she精高潮 男女视频在线免费观看 | 国内免费精品视频 | 精品动漫一区二区三区 | 亚洲伦理视频 | 热久久国产精品 | 成人毛片视频网站 | 日本天堂在线 | 亚洲色图.com | 国产r级在线 | 色综合久久88色综合天天6 | 永久免费在线观看av | 国产精品高潮呻吟视频 | 亚洲精品6 | 成人激情在线观看 | 人妻熟女一区二区三区app下载 | 少妇太紧太爽又黄又硬又爽 | 久久曰视频 | 日本做爰全过程免费看 | 娇小激情hdxxxx学生 | 婷婷av在线| 日本网站在线播放 | 神秘电影永久入口 | av第一页| 日本黄色大片网站 | 日韩久久久久久久久久 | 久久无码精品丰满人妻 | 麻豆国产精品一区 | 久草资源网 |