redis??????????

1548 ワード

私たちはよく1つの情況に出会うことができて、方法の中で本システムの方法を呼び出していくつかの操作をして、それから外システムの方法を呼び出していくつかの操作をして、ここで本システムの方法が成功して、外部システムの方法が失敗した時、往々にして私たちはロールバックしてあるいは補償の操作をしなければならなくて、ここで私たちは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から取り除きます.