Redisson分布式锁实战-2:解决wait_time之坑
生活随笔
收集整理的這篇文章主要介紹了
Redisson分布式锁实战-2:解决wait_time之坑
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們一起來(lái)分析一下原因,我們獲取鎖之后,我們只打印了一個(gè)日志,然后從配置文件里面拿到一個(gè)hour,然后就結(jié)束了,結(jié)束之后就來(lái)到finally里邊,而這個(gè)時(shí)間并沒(méi)有執(zhí)行SQL語(yǔ)句,所以他的時(shí)間會(huì)非常非常短,是小于一秒的,而另外一個(gè)TOMCAT在執(zhí)行的時(shí)候呢,在等待一秒之后,發(fā)現(xiàn)我又能獲取鎖了,所以在同一次Schedule執(zhí)行的時(shí)候,我們就會(huì)發(fā)生兩個(gè)進(jìn)程,都拿到分布式鎖,所以這一次我們把waittime改成0,/*** Redisson分布式鎖實(shí)現(xiàn)* @throws InterruptedException*/
// @Scheduled(cron="0 */1 * * * ?")//每1分鐘(每個(gè)1分鐘的整數(shù)倍)public void closeOrderTaskV4() throws InterruptedException {RLock lock = redissonManager.getRedisson().getLock(Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);boolean getLock = false;try {if(getLock = lock.tryLock(0,50, TimeUnit.SECONDS)){//trylock增加鎖log.info("===獲取{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2"));iOrderService.closeOrder(hour);}else{log.info("===沒(méi)有獲得分布式鎖:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);}}finally {if(!getLock){return;}log.info("===釋放分布式鎖:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);lock.unlock();為1的時(shí)候兩個(gè)TOMCAT都會(huì)獲取到鎖的一個(gè)問(wèn)題,那我們就可以使waittime變成0,解決了這個(gè)問(wèn)題,不再去等待,所以這也是我們實(shí)際工作中發(fā)現(xiàn)的一個(gè)問(wèn)題,一個(gè)小坑,如果大家對(duì)這里的預(yù)估時(shí)間不是太準(zhǔn)確的話,建議把waittime這個(gè)時(shí)間設(shè)置為0,以及如何分析waittime的一個(gè)原理,在使用Redisson的時(shí)候,我們最好使用waittime是0,否則會(huì)產(chǎn)生兩邊同時(shí)拿到分布式鎖的一個(gè)問(wèn)題,也就是我們分布式事務(wù)執(zhí)行的非常非???小于1秒的時(shí)候,就會(huì)有這么一個(gè)坑,我現(xiàn)在在實(shí)際工作中使用Redisson分布式鎖的時(shí)候,也會(huì)把waittime統(tǒng)一設(shè)置成0,finally里如果沒(méi)有獲取到所就直接return了,并不會(huì)執(zhí)行unlock和打印日志,所以在TOMCAT2里只會(huì)看到?jīng)]有獲取到分布式鎖,和我們預(yù)期是一致的,waittime請(qǐng)大家務(wù)必設(shè)置成0,這樣比較統(tǒng)一,也不會(huì)出現(xiàn)問(wèn)題,我們也不需要來(lái)評(píng)估這個(gè)定時(shí)任務(wù),所執(zhí)行業(yè)務(wù)邏輯的時(shí)候,他所耗費(fèi)的一個(gè)時(shí)間,我們只需要讓每一次的waittime,為0即可,讓每一個(gè)TOMCAT競(jìng)爭(zhēng)鎖并不等待,對(duì)分布式鎖原生實(shí)現(xiàn),和Redisson來(lái)實(shí)現(xiàn)分布式鎖,都有一個(gè)比較深入的理解了
?
總結(jié)
以上是生活随笔為你收集整理的Redisson分布式锁实战-2:解决wait_time之坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redisson分布式锁实战-1:构建分
- 下一篇: mysql日期/时间转换为字符串