redis??????????
1548 ワード
私たちはよく1つの情況に出会うことができて、方法の中で本システムの方法を呼び出していくつかの操作をして、それから外システムの方法を呼び出していくつかの操作をして、ここで本システムの方法が成功して、外部システムの方法が失敗した時、往々にして私たちはロールバックしてあるいは補償の操作をしなければならなくて、ここで私たちはredisで実現することができます.
ここで①はデータベースに対するローカル操作、②solrやMQをタッチする操作、①が成功、②が失敗する可能性があります.このような状況を記録して処理する必要があるので、ここでは最初からredisに格納し、①②を実行してからredisのこのデータを削除することで、タイマーで走って、redisから問題のあるデータを取得してループ実行することができます.solrと髪MQを補い、redisから取り除きます.
// , redis
String seckillCheckedListKey = "secKillCheckedList";
String valKey = applyWare.getId() + "_" + DateUtil.formatDateTime(new Date());
this.redisClient.sadd(seckillCheckedListKey, valKey);
boolean success = checkFlowOperate.checkApply(checkApplyParam); ①
LogTypeEnum.ROUTINE_CHECK_RECOMMEND.warn("checkupdate applyWareId={} db success={}", applyWare.getId(), success);
if (!success) {
result.setResultCode(" , !");
return result;
}
// ,
LogTypeEnum.ROUTINE_CHECK_RECOMMEND.warn("checkupdate applyWareId={} solr begin", applyWare.getId());
BaseParam baseParam = checkFlowOperate.indexMQOpt(OperateType.ADD,checkApplyParam, pageView.getRoleType()); ②
LogTypeEnum.ROUTINE_CHECK_RECOMMEND.warn("checkupdate applyWareId={} solr finish", applyWare.getId());
redisClient.srem(seckillCheckedListKey, valKey);// redis
ここで①はデータベースに対するローカル操作、②solrやMQをタッチする操作、①が成功、②が失敗する可能性があります.このような状況を記録して処理する必要があるので、ここでは最初からredisに格納し、①②を実行してからredisのこのデータを削除することで、タイマーで走って、redisから問題のあるデータを取得してループ実行することができます.solrと髪MQを補い、redisから取り除きます.