您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何使用redis解決負載均衡定時任務重復執行問題,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
原理:redis里邊 setnx方法進行設置時,如果key已存在,則不添加,key不存在,則進行添加;同時因為redis是單線程的所以不存在安全問題
代碼部分邏輯: 1、以定時任務的任務id作為key,任意字符串值(這里使用"true")作為value,設置進redis
2、通過redis中setnx(添加一個key,如果key已存在,則不添加)判斷該任務是否執行,如果result為true,則未執行,為false則已執行,定時任務直接return
3、為上邊的key設置一個緩存存活時間(放置代碼執行過程出現問題,導致緩存未刪除,從而導致定時任務只執行一次,建議設置時間遠小于定時任務時間間隔)
4、定時任務內容執行完畢后,刪除之前設置的緩存,同時關閉redis連接(保證一次定時任務執行完之后再執行下次定時任務)
具體代碼如下
JobKey key=jobExecutionContext.getJobDetail().getKey(); String taskId=key.getName();//redis中setnx(添加一個key,如果key已存在,則不添加)判斷該任務是否執行,如果result為true,則未執行,為false則已執行,定時任務直接returnRedisConnection connection=redisTemplate.getConnectionFactory().getConnection();boolean setNXResult= connection.setNX(taskId.getBytes(),"true".getBytes());if(!setNXResult){ return; } run(); connection.del(taskId.getBytes()); connection.close();
上述內容就是如何使用redis解決負載均衡定時任務重復執行問題,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。