亚洲欧美综合网_国产丶欧美丶日本不卡视频_久久精品亚洲精品国产欧美kt∨ _国产精品自在欧美一区_欧美成人精品激情在线观看 _婷婷丁香久久五月婷婷_国产一本一道久久香蕉_国产www精品_亚洲国产精品久久久久秋霞蜜臀_国产精品xxxxx

針對RedisTemplate分布式鎖實現(xiàn)WatchDog

2023-04-17 08:45:34 來源:騰訊云


(資料圖片)

在此之前,去看了下Redission的實現(xiàn)原理,不過在開發(fā)中,原本的代碼使用RedistTemplate實現(xiàn)的,也不太想換,所以我想了下,不如自己實現(xiàn)要給WatchDog。

我的想法是,在用戶加上鎖的時候開啟個定時任務線程,并且在定時任務中,判斷原線程isAlive狀態(tài)進行“續(xù)命”。

下面是代碼(在這里面為了方便,未使用的是HuTool.CornUtil來實現(xiàn)動態(tài)定時任務):

/** * Title * * @ClassName: LockUtil * @Description:鎖工具類,通過內部枚舉類實現(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){                                //如果同一個項目之前打開過,那么先關閉,避免重復啟動                                CronUtil.stop();                                //支持秒級別定時任務                                CronUtil.setMatchSecond(true);                                //定時服務啟動                                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;        }}

關鍵詞:

相關文章

熱文推薦

針對RedisTemplate分布式鎖實現(xiàn)WatchDog
針對RedisTemplate分布式鎖實現(xiàn)WatchDog

在此之前,去看了下Redission的實現(xiàn)原理,不過在開發(fā)......更多>

早知道:上市公司獨立董事制度全面改革;寧德時代鈉離子電池首發(fā)落地
早知道:上市公司獨立董事制度全面改革;寧德時代鈉離子電池首發(fā)落地

上市公司獨立董事制度全面改革,履職更具“獨立性”;......更多>

廣發(fā)證券:AI投資會有一段時間調整期,下一階段依靠兩方面外界因素_全球快資訊
廣發(fā)證券:AI投資會有一段時間調整期,下一階段依靠兩方面外界因素_全球快資訊

廣發(fā)證券最新研報表示,AI方面的投資會有一段時間的調......更多>

環(huán)球動態(tài):華泰證券:關注AI大模型在終端側的輕量化應用
環(huán)球動態(tài):華泰證券:關注AI大模型在終端側的輕量化應用

華泰證券研報表示,模型壓縮技術是實現(xiàn)AI大模型在邊 ......更多>

排行推薦

旺能環(huán)境:簽署《監(jiān)利市餐廚垃圾綜合處理和資源化利用項目特許經營協(xié)議》|世界簡訊
旺能環(huán)境:簽署《監(jiān)利市餐廚垃圾綜合處理和資源化利用項目特許經營協(xié)議》|世界簡訊
旺能環(huán)境(002034):簽署《監(jiān)利市餐廚垃圾綜合處理和資... 更多>
環(huán)球微頭條丨中證報:因城施策持續(xù)顯效,樓市企穩(wěn)跡象漸增
環(huán)球微頭條丨中證報:因城施策持續(xù)顯效,樓市企穩(wěn)跡象漸增
中指研究院認為,各地因城施策支持力度不斷增強,短期... 更多>
證券日報:旅游市場加快復蘇, “五一”出行熱度高漲
證券日報:旅游市場加快復蘇, “五一”出行熱度高漲
攜程旗下FlightAi市場洞察平臺數據顯示,截至4月14日... 更多>
中信建投:光伏估值處于低位 看好一季報業(yè)績超預期方向_世界即時
中信建投:光伏估值處于低位 看好一季報業(yè)績超預期方向_世界即時
中信建投最新研報表示,市場對于光伏板塊預期悲觀,主... 更多>
世界今日報丨俄羅斯總統(tǒng)普京會見李尚福
據新華社,當地時間4月16日,俄羅斯總統(tǒng)普京在莫斯科... 更多>
全球今熱點:經濟日報:確保電力平穩(wěn)迎峰度夏
文章稱,隨著社會生產生活快速恢復,今年迎峰度夏期間... 更多>
經濟日報:多渠道拓展國產大豆消費|全球滾動
國家糧食和物資儲備局科學研究院首席研究員李愛科撰文... 更多>
天天熱訊:國內成品油零售價將迎今年來最大漲幅,92號汽油每升上漲0.4元左右
受國際油價大幅攀升影響,國內汽柴油零售價結束連跌走... 更多>
【環(huán)球新視野】產業(yè)趨勢投資中,如何賺“認知差”的錢?
投資進化論系列:消除不確定性這一輪令人瞠目結舌的AI... 更多>
全球觀熱點:寫給所有散戶的一封信:換手率大于7%意味著什么?看懂少走彎路!
所謂市場,就是交易場所。市場本身不產生利潤。所謂賺... 更多>
上海誼眾紫杉醇聚合物膠束新增適應癥臨床獲批
$上海誼眾(SH688091)$從國家藥品監(jiān)督管理局藥品評審中... 更多>
機構開始覆蓋光庫_觀點
光庫周五漲13 69%。機構覆蓋開始了。海通吹響號角,... 更多>
30年期國債期貨即將上市 首批3個合約將于4月21日交易
具體而言,中金所在《通知》中稱,30年期國債期貨首批... 更多>
時訊:好奇和天真
$東阿阿膠(SZ000423)$自己的簽名檔從來到雪球就是這個... 更多>

世界動態(tài):今年應該買什么(主線順序

淺談華晨中國01114的估值和安全邊際

【價值重估】醫(yī)藥板塊逆勢上漲,AI

滾動:無名最終票房具體詳細內容是

當前資訊!人頭攢動 掌聲連連!廣交

世界新消息丨持有興業(yè)銀行的投資者

埃安肖勇:特斯拉不是不能戰(zhàn)勝

寧德時代鈉離子電池首發(fā)落地奇瑞車

繼續(xù)討論不同輪動日的影響

4月16日:|世界快資訊

亚洲欧美综合网_国产丶欧美丶日本不卡视频_久久精品亚洲精品国产欧美kt∨ _国产精品自在欧美一区_欧美成人精品激情在线观看 _婷婷丁香久久五月婷婷_国产一本一道久久香蕉_国产www精品_亚洲国产精品久久久久秋霞蜜臀_国产精品xxxxx
中文在线一区二区| 激情深爱一区二区| 久久精品水蜜桃av综合天堂| 亚洲欧美二区三区| a级精品国产片在线观看| 久久久精品黄色| 国产精品一二三区在线| 精品处破学生在线二十三| 日本特黄久久久高潮| 日韩三级精品电影久久久 | 欧美电视剧免费观看| 视频在线观看91| 日韩久久免费av| 福利一区二区在线| 亚洲蜜臀av乱码久久精品| 欧美日韩精品一区二区天天拍小说| 日本亚洲三级在线| 国产精品久久综合| 欧美一区二区三区成人| 成人黄色免费短视频| 亚洲成人av一区二区三区| 欧美刺激午夜性久久久久久久| 国产成人av影院| 亚洲超丰满肉感bbw| 久久亚洲精精品中文字幕早川悠里 | 九九精品视频在线看| 国产精品久线在线观看| 色噜噜偷拍精品综合在线| 爽好多水快深点欧美视频| 国产精品久久免费看| 欧美一级日韩不卡播放免费| 色综合一个色综合| 国产91丝袜在线播放九色| 性做久久久久久久久| 中文字幕亚洲综合久久菠萝蜜| 欧美猛男男办公室激情| 色综合欧美在线视频区| 国产精品一区专区| 亚洲一区二区三区视频在线| 国产精品女上位| 久久一区二区三区四区| 99re视频这里只有精品| 亚洲一区二区五区| 国产毛片精品视频| 久久久午夜精品| 国产91清纯白嫩初高中在线观看 | 波多野结衣视频一区| 视频在线观看91| 亚洲美女电影在线| 亚洲欧洲中文日韩久久av乱码| 国产精品污网站| 国产日产亚洲精品系列| 国产欧美日韩久久| 国产亚洲综合色| 国产欧美日韩不卡| 中文字幕免费一区| 国产精品理论片| 一色屋精品亚洲香蕉网站| 日韩一区在线播放| 中文字幕在线观看一区二区| 国产精品护士白丝一区av| 中文在线资源观看网站视频免费不卡| 久久久精品欧美丰满| 欧美精品一区二区久久婷婷| 国产欧美日本一区视频| 中文字幕亚洲视频| 亚洲国产精品麻豆| 日本vs亚洲vs韩国一区三区二区 | 欧美日韩mp4| 51久久夜色精品国产麻豆| 日韩久久久久久| 久久久亚洲精品石原莉奈 | 国内成人免费视频| 国产成都精品91一区二区三| 色婷婷综合久久久中文一区二区| 欧美三区在线观看| 日韩写真欧美这视频| 国产精品天天摸av网| 亚洲国产精品久久久久婷婷884| 蜜桃av噜噜一区| 成人网男人的天堂| 69av一区二区三区| 国产精品乱码久久久久久| 亚洲国产综合人成综合网站| 国产精品一区免费在线观看| 精品视频在线视频| 欧美第一区第二区| 亚洲啪啪综合av一区二区三区| 日本强好片久久久久久aaa| 成人综合婷婷国产精品久久蜜臀| 欧美性色综合网| 国产精品人人做人人爽人人添| 亚洲国产另类精品专区| 成人毛片在线观看| 欧美精品一区二区三区久久久| 亚洲成人手机在线| 在线亚洲免费视频| 国产精品私人自拍| 国产麻豆视频精品| 欧美mv和日韩mv国产网站| 亚洲免费在线观看| 成人app网站| 久久久久久久久久电影| 热久久一区二区| 在线免费观看日韩欧美| 亚洲日本青草视频在线怡红院| 极品美女销魂一区二区三区| 欧美色图免费看| 亚洲一区二区三区中文字幕在线 | 日韩精品一区二区三区中文精品| 日韩美女视频一区| 国产精品一区二区男女羞羞无遮挡| 91精品国产欧美一区二区成人 | 51精品秘密在线观看| 亚洲精品成人悠悠色影视| av在线播放成人| 亚洲天堂成人网| 成人精品免费网站| 中文字幕亚洲一区二区av在线| 国产大片一区二区| 亚洲色图色小说| 91高清视频免费看| 爽好久久久欧美精品| 日韩你懂的电影在线观看| 免费成人美女在线观看.| 欧美不卡一区二区| 国产综合成人久久大片91| 欧美网站大全在线观看| 琪琪久久久久日韩精品| 国产日韩欧美激情| 色综合网站在线| 日韩电影一二三区| 久久久久久**毛片大全| 成人开心网精品视频| 亚洲尤物在线视频观看| 精品国产免费人成在线观看| 国模套图日韩精品一区二区| 中文字幕乱码一区二区免费| 日本久久电影网| 激情综合网激情| 一区二区三区欧美视频| 正在播放亚洲一区| 国产成人亚洲综合a∨婷婷图片| 亚洲精品久久7777| 26uuu精品一区二区| 欧美视频在线播放| 国产成人免费视频一区| 亚洲成人免费看| 国产人成一区二区三区影院| 在线视频一区二区三| 国产高清亚洲一区| 美女网站在线免费欧美精品| 国产精品国产三级国产普通话蜜臀| 在线综合视频播放| 99re66热这里只有精品3直播| 国产在线精品一区二区夜色| 伊人夜夜躁av伊人久久| 国产精品高清亚洲| 国产女同性恋一区二区| 欧美大尺度电影在线| 欧美猛男超大videosgay| jizz一区二区| 粉嫩高潮美女一区二区三区| 国产一区在线不卡| 国内成+人亚洲+欧美+综合在线| 亚洲一区二区三区四区在线免费观看| 国产女人水真多18毛片18精品视频 | www成人在线观看| 日韩一区二区三区视频| 欧美另类久久久品| 欧美三级在线播放| 欧美三级电影在线看| 欧美视频一区二区| 欧美日韩精品是欧美日韩精品| 欧美综合亚洲图片综合区| 色综合天天综合网天天狠天天 | 麻豆国产精品一区二区三区| 亚洲va韩国va欧美va| 亚洲五月六月丁香激情| 亚洲乱码中文字幕| 一区二区三区91| 一区二区欧美国产| 午夜免费久久看| 国模少妇一区二区三区| 国产福利一区在线观看| 成人自拍视频在线观看| 91美女片黄在线| 欧美久久久久久久久| 日韩欧美国产1| 欧美tickling网站挠脚心| 欧美精彩视频一区二区三区| 国产精品久久久久婷婷| 亚洲一区免费在线观看| 同产精品九九九| 精品裸体舞一区二区三区| 国产精品网友自拍| 婷婷综合五月天| www.亚洲在线| 久久国产精品区| 成人午夜电影网站|