Java中使用redis鎖

2021-09-02 13:46:16 字數 791 閱讀 9490

像這種業務的話,我們要實現會遇到一些問題:

1、有可能兩個task同時跑,這樣的話就會造成兩個不同的程序會同時向資料庫中寫入,會造成資料混亂。

為了解決這個問題,我們就可以使用redis鎖來解決。

在task要向資料庫中寫資料的時候,也就是我的報表統計業務開始之前就向redis中計入乙個標識,使用redis的setnx命令(這個命令就是當我向redis存入相同key值的時候,如果這個key存在,則返回0表示存入失敗,如果不存在,則返回1表示存入成功)。當乙個程序進來就往redis裡面寫入乙個標識,如果寫入成功就執行我的報表統計業務,如果失敗就不做任何處理,直接結束。這樣就保證乙個程序在執行這塊**的同時,其他的程序是不會執行的。這樣就不會出現插入資料庫資料混亂。

@override

public void initreportdata()

}catch (exception e)finally

}}

redisutil是封裝的乙個操作redis的公共類。redisutil.setifnull()方法跟setnx方法差不多,就是寫入redis成功返回true,寫入失敗返回false。存入的redis表示key就是自定義的:lockreport:allreportinit:agreeonebegin,value就是uuid生成的。在執行報表統計**的這個程序執行完了之後,不管執行是否成功都會進入finally中,並且要把value取出來和id比較,如果相等就是同乙個程序,這個時候就要刪除這個redis標識。這樣的話後續的程序進來發現redis沒有這個標識就會去執行報表統計的**。

Java中使用Jedis操作Redis之一

依賴的jar包 jedis dependency groupid redis.clients groupid artifactid jedis artifactid version 2.9.0 version dependency 使用單連線 此方式僅建議用於開發環境做除錯用。public clas...

Spring Boot中使用Redis資料庫

時間 2016 04 15 16 34 49 程式猿dd 原文 主題 redis spring boot 資料庫 spring boot中除了對常用的關係型資料庫提供了優秀的自動化支援之外,對於很多nosql資料庫一樣提供了自動化配置的支援,包括 redis,mongodb,elasticsearc...

在laravel中使用redis

install composer require predis predis 配置 config database.php redis client predis default host env redis host localhost password env redis password nu...