保证redis与mysql数据一致性方案

因为redis是不支持回滚的,所以要在程序中进行控制,重置key的值,mysql是可以回滚的,但是为了数据的一致性,采用编程式事务进行控制,mysql回滚和redis重置都能统一处理,从而实现数据的一致性。

如:

@Override
public Msg addEmployContractUser(String[] user_codes) {
    // TODO Auto-generated method stub
    Msg msg = transactionTemplate.execute(new TransactionCallback<Msg>() {
    @Override
    public Msg doInTransaction(TransactionStatus status) {
    Msg msgShow = new Msg();
   //redis的相关操作
    int ret = 0;
    employContractMapper.updateEmploySeq(user_codes);
    ret = employContractMapper.addEmployContractUser(user_codes);
 
    if(ret == 0){
        ret = employContractMapper.addEmployContractExists(user_codes);
    }
    if(ret>0){
        msgShow.setMsg("增加成功");
        return msgShow;
    }else {
     //redis 重置相关操作 status.setRollbackOnly(); //mysql回滚相关操作 msgShow.setMsg(
"最新劳务用工合同信息已存在列表,无需增加"); return msgShow; }} }); return msg; }

 

posted on 2021-01-28 23:00  芝麻开花——节节高  阅读(319)  评论(0编辑  收藏  举报

导航