保证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; }
好好学习,天天向上