프로젝트 요약 - 웹 프로젝트에서의 데이터 일치성 문제
/**
* :
* @param msgRequest
* @return
*/
private String subscribe(MsgRequest msgRequest){
MsgResponseText response = new MsgResponseText();
response.setFromUserName(msgRequest.getToUserName());
response.setToUserName(msgRequest.getFromUserName());
response.setMsgType(MsgType.Text.toString());
response.setContent(" !");
response.setCreateTime(System.currentTimeMillis()/1000);
/*
*
*/
String openId = msgRequest.getFromUserName();
String account = msgRequest.getToUserName();
FansAccount fansAccount = fansDao.queryByOpenId(openId);
if(fansAccount==null){
// ( )
fansAccount = new FansAccount();
//
refreshFansAccount(fansAccount,openId, account);
//
if(StringUtils.isEmpty(fansAccount.getOpenId())){
logger.info(" , ...");
}else{
fansDao.addFansAccount(fansAccount);
}
}else{
// ( )
refreshFansAccount(fansAccount,openId, account);
//
fansDao.updateWhenFollowOrNot(fansAccount);
}
// ,
List<WexinBaseMsg> list = baseMsgDao.queryByReplyType(Constants.BeaddedReply);
if(list!=null&&list.size()>0){
response.setContent(list.get(0).getContent());
}
String newsToXml = MsgXmlUtil.textToXml(response);
logger.info("newToXml:
"+newsToXml);
return newsToXml;
}
위챗이 두 개의 메시지를 작업 플랫폼 서버에 연속으로 전송할 때 서버는 두 개의 라인을 열어 대응하는 요청을 처리한다. 두 개의 요청이 너무 가깝기 때문에 (본질적으로 사용자가 오작한 것) 결과적으로 입고 판단 시 두 개의 라인 판단이 모두 새로운 관심사 팬이고 두 개의 기록을 동시에 입고하는 상황이 발생한다.다중 스레드 환경에서 조회 판단과 입고 조작은 원자 조작이어야 데이터의 일치성을 확보할 수 있다.해결 방법은 같은 업무에서 판단을 실행하고 조작을 삽입할 수도 있고 이 코드에 자물쇠를 채워 원자성을 확보할 수도 있다.
양식을 제출할 때도 중복 제출을 고려해야 한다는 점에서 웨이커 중국의 사용자 체험은 매우 좋지 않다. 방안을 제출할 때 페이지가 반응이 없을 때 중복 제출을 자주 한다. 그 결과 페이지를 새로 고친 후에 중복 제출 N조 기록을 볼 수 있다.웹 프로젝트는 사용자의 중복 조작 상황을 고려할 필요가 있다. 만약에 응답 속도가 빠르지 않고 사용자가 인내심이 없는 상황에서 중복 데이터가 발생할 수 있기 때문이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.