針對RedisTemplate分布式鎖實現(xiàn)WatchDog-熱資訊
【資料圖】
在此之前,去看了下Redission的實現(xiàn)原理,不過在開發(fā)中,原本的代碼使用RedistTemplate實現(xiàn)的,也不太想換,所以我想了下,不如自己實現(xiàn)要給WatchDog。
我的想法是,在用戶加上鎖的時候開啟個定時任務(wù)線程,并且在定時任務(wù)中,判斷原線程isAlive狀態(tài)進(jìn)行“續(xù)命”。
下面是代碼(在這里面為了方便,未使用的是HuTool.CornUtil來實現(xiàn)動態(tài)定時任務(wù)):
/** * Title * * @ClassName: LockUtil * @Description:鎖工具類,通過內(nèi)部枚舉類實現(xiàn)單例,防止反射攻擊 * @author: Karos * @date: 2023/1/4 0:17 * @Blog: https://www.wzl1.top/ */package cn.katool.lock;import cn.hutool.core.util.BooleanUtil;import cn.hutool.core.util.ObjectUtil;import cn.hutool.cron.CronUtil;import cn.hutool.cron.task.Task;import cn.katool.Config.LockConfig;import cn.katool.Exception.ErrorCode;import cn.katool.Exception.KaToolException;import cn.katool.other.MethodIntefaceUtil;import com.qiniu.util.StringUtils;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Scope;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import org.springframework.util.ObjectUtils;import javax.annotation.Resource;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.TimeUnit;@Component@Scope("prototype")@Slf4jpublic class LockUtil { @Resource RedisTemplate redisTemplate; private LockUtil(){ } private static boolean isOpenCorn=false; /** * 帶看門狗機制上鎖 * @param lockObj * @return */ public boolean DistributedLock(Object lockObj){ try { return DistributedLock(lockObj,null,null); } catch (KaToolException e) { throw new RuntimeException(e); } } @Resource LockConfig lockConfig; //加鎖 /** * 無看門狗機制上鎖 * @param obj * @param exptime * @param timeUnit * @return * @throws KaToolException */ public boolean DistributedLock(Object obj,Long exptime,TimeUnit timeUnit) throws KaToolException { if (ObjectUtil.isEmpty(obj)){ throw new KaToolException(ErrorCode.PARAMS_ERROR," Lock=> 傳入obj為空"); } Boolean isDelay=false; if (ObjectUtil.isAllEmpty(exptime,timeUnit)){ isDelay=true; } if(ObjectUtil.isEmpty(exptime)){ exptime= lockConfig.getInternalLockLeaseTime();; } if (ObjectUtils.isEmpty(timeUnit)){ timeUnit=lockConfig.getTimeUnit(); } //線程被鎖住了,就一直等待 DistributedAssert(obj); Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("Lock:"+obj.toString(), "1", exptime, timeUnit); log.info("katool=> LockUntil => DistributedLock:{} value:{} extime:{} timeUnit:{}",obj.toString(), "1", exptime, timeUnit); //實現(xiàn)看門狗 if (isDelay){ if (LockUtil.isOpenCorn==false){ //如果同一個項目之前打開過,那么先關(guān)閉,避免重復(fù)啟動 CronUtil.stop(); //支持秒級別定時任務(wù) CronUtil.setMatchSecond(true); //定時服務(wù)啟動 CronUtil.start(); LockUtil.isOpenCorn=true; } Thread thread = Thread.currentThread(); TimeUnit finalTimeUnit = timeUnit; Long finalExptime = exptime; class TempClass{ public String scheduleId; } final TempClass tempClass = new TempClass(); tempClass.scheduleId=CronUtil.schedule("0/30 * * * * ?", new Task() { @SneakyThrows @Override public void execute() { boolean alive = thread.isAlive(); if (alive) { delayDistributedLock(obj, finalExptime>=3?(finalExptime / 3):finalExptime, finalTimeUnit); return; } else { if (tempClass.scheduleId==null||"".equals(tempClass.scheduleId)){ return; } CronUtil.remove(tempClass.scheduleId); DistributedUnLock(obj); return; } } }); } return BooleanUtil.isTrue(aBoolean); } //檢鎖 public void DistributedAssert(Object obj) throws KaToolException { if (ObjectUtils.isEmpty(obj)){ throw new KaToolException(ErrorCode.PARAMS_ERROR," Lock=> 傳入obj為空"); } while(true){ Object o = redisTemplate.opsForValue().get("Lock:" + obj.toString()); if (ObjectUtils.isEmpty(o))return; } } //延期 public boolean delayDistributedLock(Object obj,Long exptime,TimeUnit timeUnit) throws KaToolException { if (ObjectUtils.isEmpty(obj)){ throw new KaToolException(ErrorCode.PARAMS_ERROR," Lock=> 傳入obj為空"); } Boolean aBoolean = redisTemplate.opsForValue().setIfPresent("Lock:"+obj.toString(), "1", exptime, timeUnit); log.info("katool=> LockUntil => delayDistributedLock:{} value:{} extime:{} timeUnit:{}",obj.toString(), "1", exptime, timeUnit); return BooleanUtil.isTrue(aBoolean); } //釋放鎖 public boolean DistributedUnLock(Object obj) throws KaToolException { if (ObjectUtils.isEmpty(obj)){ throw new KaToolException(ErrorCode.PARAMS_ERROR," Lock=> 傳入obj為空"); } Boolean aBoolean = redisTemplate.delete("Lock:" + obj.toString()); log.info("katool=> LockUntil => unDistributedLock:{} isdelete:{} ",obj.toString(),true); return BooleanUtil.isTrue(aBoolean); } //利用枚舉類實現(xiàn)單例模式,枚舉類屬性為靜態(tài)的 private enum SingletonFactory{ Singleton; LockUtil lockUtil; private SingletonFactory(){ lockUtil=new LockUtil(); } public LockUtil getInstance(){ return lockUtil; } } @Bean("LockUtil") public static LockUtil getInstance(){ return SingletonFactory.Singleton.lockUtil; }} 標(biāo)簽:
電腦
-
電腦定時開機關(guān)機在哪里設(shè)定?電腦如何設(shè)置定時開機和關(guān)機方法?我們使用電腦在工作中,可能會使用到定時開關(guān)機的功能,一般來說,定時關(guān)機在系統(tǒng)上通過CMD命令、創(chuàng)建個...
-
電腦主板如何在BIOS中設(shè)置網(wǎng)卡啟動?無盤電腦設(shè)置PXE網(wǎng)卡啟動方法分享一般來說,設(shè)置電腦從網(wǎng)卡啟動一般絕大數(shù)應(yīng)用于無盤系統(tǒng),當(dāng)然主板上的網(wǎng)卡必須包含PXE芯片,否則無法啟...
-
電腦通電自啟動怎么設(shè)置?主板BIOS之電腦通電自動開機設(shè)置步驟最近一個用戶想要電腦實現(xiàn)一個功能,那就是電腦通電之后,電腦會自動開機,這樣就不需要人為去開機了,...
-
重做系統(tǒng)網(wǎng)絡(luò)連接不出來怎么辦?計算機無法上網(wǎng)是什么原因?計算機重新安裝系統(tǒng)后無法上網(wǎng)。很多朋友問,為什么會有這樣的事情?如何處理?重點分析使用網(wǎng)絡(luò)遠(yuǎn)程控制...
-
商務(wù)辦公選銳龍還是酷睿?聯(lián)想ThinkPad T14 Gen3怎么樣?提到移動商務(wù)辦公,很多用戶不免第 一時間想到絕 對經(jīng)典的ThinkPad的T系列機型,從新近的機型中去選擇...
硬件
- 聯(lián)想萬能無線網(wǎng)卡驅(qū)動如何安裝?無線網(wǎng)卡驅(qū)動安裝方法分享
- nvidia顯示設(shè)置不可用未檢測到圖形卡怎么解決?nvidia顯示設(shè)置不可用怎么辦?
- 華碩筆記本uefi bios如何設(shè)置?華碩主板開啟uefi模式方法分享
- 顯卡驅(qū)動有必要更新嗎?為什么需要更新顯卡的驅(qū)動程序?
- 臺式電腦cpu溫度多少正常?cpu溫度過高怎么辦?
- mac裝雙系統(tǒng)傷電腦嗎?mac裝雙系統(tǒng)有哪些壞處?
- 影馳主板是幾線品牌?影馳主板功能配置怎么樣?
- wifi密碼忘記了怎么辦?找怎么找回wifi密碼?
- 電腦聲卡驅(qū)動如何安裝?電腦聲卡驅(qū)動安裝技巧分享
- ghost系統(tǒng)是什么意思?Ghost系統(tǒng)有哪些優(yōu)缺點?
- 如何開啟內(nèi)存雙通道模式?開啟內(nèi)存雙通道模式方法分享
- 內(nèi)存的傳輸類型是什么?內(nèi)存常見術(shù)語有哪些?
- 內(nèi)存故障的表現(xiàn)有哪些?內(nèi)存接觸不良引起的故障怎么解決
- 什么是虛擬內(nèi)存?虛擬內(nèi)存怎么設(shè)置最好?
- 針對RedisTemplate分布式鎖實現(xiàn)WatchDog-熱資訊
- Consul 簡單示例
- 商洛市墓地治理專項行動工作現(xiàn)場觀摩會召開
- 應(yīng)縣氣象局發(fā)布道路結(jié)冰黃色預(yù)警【Ⅲ級/較重】
- 講臺上的詩人 動態(tài)焦點
- 2023年上海車展:理想汽車宣布進(jìn)軍純電市場,發(fā)布純電解決方案
- 今日報丨上海市經(jīng)濟(jì)信息化委:構(gòu)建科創(chuàng)算力新設(shè)施 統(tǒng)籌算力基礎(chǔ)設(shè)施布局
- 326只股短線走穩(wěn) 站上五日均線
- “氧氣美女”左小青:陳道明唯一緋聞女友,嫁大20歲富豪生活幸福_今日觀點
- “尋尋覓覓,勛勛冪冪”兩人傳出緋聞,馬思純曾這樣點評魏大勛
- 全球頂級家電及消費電子盛會AWE2023將開幕 ChatGPT賦能下的智能家電望“引爆”市場
- 2023年殘疾人兩項補貼年度資格認(rèn)定工作開始 廣東戶籍殘疾人6月20日前申報 焦點熱訊
- 世界聚焦:「高清組圖」貴州劍河:洞腳村春景如畫
- 貴州松桃:春風(fēng)襲來 鴿子花開
- 華東地區(qū)包括哪些省
- 花溪區(qū)氣象臺發(fā)布冰雹橙色預(yù)警信號【Ⅱ/嚴(yán)重】
- 每日關(guān)注!一季度數(shù)據(jù)出爐!廣西經(jīng)濟(jì)開局平穩(wěn)向好
- 買高端機等于智商稅嗎?在性能趨同的情況下,高端機“高”在哪了?
- 為什么國產(chǎn)機做不出蘋果的質(zhì)感?蘋果手機使用什么材料制造?
- 二手手機到底能不能買,買的時候又應(yīng)該注意哪些問題?
- 影響手機續(xù)航能力的因素有哪些?怎么延長手機的續(xù)航能力?
- 如何判斷一款手機的屏幕好壞?手機屏幕分辨率是不是越高越好?
- 為什么大家看不起手機的LCD屏幕?手機LCD屏幕存在哪些缺陷?
- Redmi性價比怎樣?紅米怎么看電池?fù)p耗?
- 智能手表是雞肋還是剛需?applewatch有必要買么?
- 為什么歐洲人不做手機了?是輸不起,還是有心無力呢?
- 【天天時快訊】池州市39個村入選省級美麗宜居村莊
- 全球速看:點乘和叉乘的區(qū)別幾何意義 點乘和叉乘的區(qū)別
- 哈爾濱呼蘭海事處“防”字當(dāng)頭上好水上交通安全第一課
- 力盟科技午后持續(xù)拉升 股價一度漲超22%|全球快看
- 熱消息:ChatGPT板塊進(jìn)一步走強 萬興科技創(chuàng)歷史新高
- 榮耀 X50i 手機發(fā)布:一億像素主攝 + 6.7 英寸大屏,1499 元起-每日快播
- 蘋果手機產(chǎn)量這么大,它的手機系統(tǒng)是怎么錄入進(jìn)去的?
- 新農(nóng)開發(fā):尊敬的投資主要是市場化資源整合原因,具體請查看公司公告及說明
- 在更高的起點創(chuàng)業(yè)!專訪Aqara重慶服務(wù)商,探問「經(jīng)營秘籍」!|天天熱門
- 內(nèi)蒙古路況氣象預(yù)警信息(2023.4.21)_今日熱搜
- 交警宣傳進(jìn)農(nóng)村 安全守護(hù)暖人心
- 環(huán)球即時:6%數(shù)量“撬動”20%產(chǎn)值 上海汽車行業(yè)繼續(xù)在智造上“深耕細(xì)作”
- 環(huán)球資訊:唱衰中國發(fā)展,癡人說夢話(望海樓) ——污蔑中國抗疫,美方何其荒唐④
- 財政金融齊發(fā)力 經(jīng)濟(jì)向好底氣足_每日速讀
- 每日速訊:集中調(diào)解糾紛 為農(nóng)耕保駕護(hù)航
- arriveguide男裝是哪個國家的品牌_什么檔次怎么樣 今頭條
- 2022湯圓十大品牌排行榜_湯圓哪個牌子好|環(huán)球快消息
- 當(dāng)前通訊!喂!我們愛你多多
- 世界要聞:中金:國際線或被市場嚴(yán)重低估 自二季度起可能出現(xiàn)跨越式恢復(fù)
- 華泰證券:黃金珠寶需求加速釋放 板塊格局清晰、優(yōu)選領(lǐng)先龍頭 焦點消息
- 世界焦點!廣州房地產(chǎn)管理職業(yè)學(xué)院_廣州市房地產(chǎn)管理學(xué)校
- 世界快播:喜糖買什么牌子的好_中國十大喜糖品牌2021
- 全球訊息:北京西城:結(jié)對共建 筑牢金融風(fēng)險“防火墻”
- 【天天新要聞】火熱!“五一”假期鐵路客票銷售創(chuàng)同期歷史新高
- 日本90名國會議員集體參拜靖國神社,成員分別來自自民黨、日本維新會等政黨|天天精選
- 武漢市發(fā)布2023年高中階段學(xué)校招生考試工作的通知
- 楚雄州以高質(zhì)量招商引資推動高質(zhì)量發(fā)展-世界速遞
- 腸衣是什么做的_腸衣的原料
- 學(xué)做油條的方法_學(xué)做油條有什么方法-天天看點
- 全球熱點評!河北日報評論員|從政治和全局高度深刻認(rèn)識主題教育的重要意義
- 大航海時代ol?攻略 環(huán)球看熱訊
- 福山潤配音的動漫主角_福山潤
- 樂經(jīng)良教授_樂經(jīng)
- 空調(diào)制冷不制熱的原因_空調(diào)為什么制冷不制熱
- CMA管理會計證書有必要考嗎?考了可以做什么工作?_當(dāng)前要聞
- 2023年中華茶祖節(jié)開幕 助力鄉(xiāng)村振興 環(huán)球熱訊
- 環(huán)球微頭條丨中國自研海底地震勘探節(jié)點采集裝備實現(xiàn)產(chǎn)業(yè)化制造
- 渡遠(yuǎn)戶外、京磁股份4月26日深交所首發(fā)上會 全球播資訊
- 天天滾動:進(jìn)口額大幅增加 日本2022財年貿(mào)易逆差達(dá)217285億日元
- 興蓉環(huán)境:中標(biāo)億元17都市龍泉驛區(qū)2022年污水治理攻堅項目
- 浙江一季度生產(chǎn)總值同比增長4.9%
- 環(huán)球熱頭條丨杜蘭特:我和萊昂納德相互尊重 我倆都有著獨特的經(jīng)歷
- 天天快報!4月21日中鋼網(wǎng)期貨早報:盤面弱勢中,黑色系波動加劇
- 4-5月鋼廠停產(chǎn)檢修及生產(chǎn)情況 全球快消息
- 《天回醫(yī)簡》正式整理出版 或為失傳扁鵲醫(yī)書_天天微資訊
- 環(huán)球觀點:寧夏8個產(chǎn)業(yè)鏈項目集中簽約 簽約金額達(dá)12.46億元
- 每日熱點:京多安:渴望明年隨隊參加主場歐洲杯 3-0拜仁還只是對決的半場
- 米切爾:麥迪遜廣場花園會很喧鬧 但作為競爭者會喜歡這種氛圍
- 二階俊博就任日中友好議員聯(lián)盟新會長,外交部回應(yīng)
- 算力概念大火,24位基金經(jīng)理發(fā)生任職變動 當(dāng)前消息
- 江西省九江市2023-04-21 06:57發(fā)布大風(fēng)藍(lán)色預(yù)警 最新快訊
- 五菱宏光mini的電池是什么電池 磷酸鐵鋰電池(最新款宏光mini僅售3萬元)
- 市場營銷師含金量高嗎 主要是做什么
- 社會工作專業(yè)是干什么的 就業(yè)方向有哪些-全球速遞
- 速訊:乙肝能治好嗎_我被中年婦女搞
- 談合同需要注意什么_簽合同時需要注意哪些事項
- 【超級重磅】金地!金地!金地!40億豪奪嘉定2塊超優(yōu)宅地!_當(dāng)前最新
- 7057套!嘉定計劃今年完成9個動遷安置房項目
- 吉布提魯班工坊:中非友誼之路越走越實 焦點消息
- 精工科技:2022年度凈利潤約2.93億元,同比增加171.99%|看熱訊
- 4個工具,讓 ChatGPT 如虎添翼!
- 什么牙膏去煙漬效果好?去煙漬最好的牙膏十大品牌排行榜|全球觀天下
- 世界熱消息:「私募基金排名」加快補齊住房租賃短板 發(fā)展保障性租賃住房是關(guān)鍵
- 《呂氏春秋》中的養(yǎng)生觀|天天熱點
- 世界滾動:理貨員爆料:超市里這3種東西,低價也不帶回家,自家人更不會吃
- 央行:預(yù)計2023年信貸投放以及社會融資規(guī)模增長將保持平穩(wěn)
- 狼性十足的星座-焦點熱議
- 專升本需要多久 如何報考專升本
- 世界簡訊:中國稀有好聽的姓氏,赤橙黃綠青藍(lán)紫都是姓氏
- 游戲盒排行榜前十名_公認(rèn)最好的6款游戲盒子-全球熱點評
- 世界新動態(tài):高考模擬志愿怎么填?
- 易滑路段標(biāo)志|熱訊
- 全球播報:宋新船
- 山西梅生書畫研究院
電競
數(shù)碼
事件
- 寶塔面板創(chuàng)建DVWA靶場,php-fpm報502問題|關(guān)注04-21
- “50元返188,100元返588”,竟然還有人被騙! 全球微資訊04-21
- 熱點評!山東首個計算醫(yī)學(xué)概念驗證中心在青揭牌,將采用產(chǎn)業(yè)資源共享模式04-21
- 上海證券交易所原副總經(jīng)理劉逖接受監(jiān)察調(diào)查_天天微頭條04-21
- 天天熱文:何超蓮竇驍巴厘島大婚,酒店房間最貴6萬,雙方家長到場見證幸福04-21
- 粵一季度新能源現(xiàn)貨交易電量達(dá)5600萬千瓦時04-21
- 每日視訊:種植牙“千元時代”來了!棗莊市中區(qū)患者成為山東首位受益者04-21
- 青馬當(dāng)日,這些人憑證件可免費乘公交啦_環(huán)球快訊04-21
- “三月三”假期廣西天氣如何?這些地方大雨、暴雨、大暴雨……04-21
- 千味央廚:今年餐飲復(fù)蘇跡象較為明顯04-21
- 各地深入挖掘農(nóng)村內(nèi)需潛力(權(quán)威發(fā)布)04-21
- 【天天新要聞】內(nèi)蒙古自治區(qū)氣象臺解除大風(fēng)藍(lán)色預(yù)警【IV級/一般】04-21
- 世界觀點:外交部發(fā)言人:敦促美國等發(fā)達(dá)國家審慎評估自身經(jīng)濟(jì)金融政策外溢影響04-21
- 每日消息!靜脈曲張襪10大品牌_靜脈曲張襪品牌排行榜04-21
- 焦點速看:泰達(dá)宏利王鵬:市場偏存量博弈 關(guān)注景氣度機會04-21










