JAvaWebでは、2人が同じレコードを同時に操作すること(シングル操作を制限する)を防止するには、redisの解決策を使用します.
最近demoをしているとき、ページ上の同じロールに2人がログインしているときに、統一レコードを同時に操作しているという問題に遭遇しました.簡単に言えば、同じ記録で同じ時刻に複数人が操作する.このような状況は私の業務の中でデータの冗長性を招き、正常なプログラムの運行を妨害します.
その際に思いついた解決策としては,ロックテーブルやキャッシュの使用(もちろん他の方法は下に伝言して検討できる~),ロックテーブルは試したことがないので自然とキャッシュを思いついた.実現の構想は、ページ側のユーザーが記録を選択して操作を行う場合、サービス側ではまず業務処理を行わず、まずキャッシュを使用して、キャッシュ中に当該業務書の操作情報が存在するかどうかを判断し、もしあれば直接ページ側に戻って、ユーザーに現在記録が処理されていることを提示することである.ない場合はその業務に格納されている操作情報を新たに追加し、(操作情報のフォーマットは自定し、一意性に注意する)、その後、業務論理処理を行い、処理が完了(異常を含む)した後、キャッシュ中の操作情報の削除を行い、ここで大公告する.(クラスタ分散式であれば、キャッシュの共有に注意~~))初歩的な試みで、皆様のご指摘を歓迎します!コードの一部は次のとおりです.
その際に思いついた解決策としては,ロックテーブルやキャッシュの使用(もちろん他の方法は下に伝言して検討できる~),ロックテーブルは試したことがないので自然とキャッシュを思いついた.実現の構想は、ページ側のユーザーが記録を選択して操作を行う場合、サービス側ではまず業務処理を行わず、まずキャッシュを使用して、キャッシュ中に当該業務書の操作情報が存在するかどうかを判断し、もしあれば直接ページ側に戻って、ユーザーに現在記録が処理されていることを提示することである.ない場合はその業務に格納されている操作情報を新たに追加し、(操作情報のフォーマットは自定し、一意性に注意する)、その後、業務論理処理を行い、処理が完了(異常を含む)した後、キャッシュ中の操作情報の削除を行い、ここで大公告する.(クラスタ分散式であれば、キャッシュの共有に注意~~))初歩的な試みで、皆様のご指摘を歓迎します!コードの一部は次のとおりです.
public boolean doRedisLock(List idList,String LockFlag,String cacheName){
boolean islockSuccess = true;
//
Map cache = CacheManager.getCache(cacheName);
List tempLockIdsList = new ArrayList<>();
for (String idTemp : idList) {
//
String nowStatus = (String) cache.get(idTemp+LockFlag);
if(nowStatus == null){// ,
tempLockIdsList.add(idTemp);
// ,
cache.put(idTemp+cacheName,cacheName);//
}else{//
// ,
for(String tempLockId: tempLockIdsList){
cache.remove(tempLockId+cacheName);
}
islockSuccess = false ;
}
}
return islockSuccess;
}