1.想着 在springboot事务中,第一步insert mysql 第二步 更新到redis中
@Transactional(rollbackFor={Exception.class}) public void addChannel(MesChannelVo mesChannelVo) { //id String id = GenerateCodeUtil.generateUUID(); //当前时间 String nowDateTime = DateUtil.DateToString(new Date(), DateStyle.YYYY_MM_DD_HH_MM_SS); MesChannel mesChannel = new MesChannel(); Beans.copy().from(mesChannelVo).to(mesChannel); mesChannel.setId(id); mesChannel.setValidStatus("Y"); mesChannel.setCreateTime(nowDateTime); mesChannel.setUpdateTime(nowDateTime); //1.插入数据库中 mesChannelDao.insert(mesChannel); // 2.更新缓存中 List<MesChannel> mesChannelsRedis = new ArrayList<>(); List<MesChannel> mesChannels = mesChannelDao.selectByEntry(mesChannel); if(mesChannels != null && !mesChannels.isEmpty()){ for (MesChannel mesCh : mesChannels){ mesChannelsRedis.clear(); mesChannelsRedis.add(mesCh); String channelType_mesTypeCode = mesCh.getChannelType() + "_" + mesCh.getMesTypeCode(); jedisUtil.setJson(channelType_mesTypeCode, JSON.toJSONString(mesChannelsRedis)); } } //3.测试事务回滚 int[] i = null; int i1 = i[0]; }
1.1 现象 mysql 数据库回滚 redis 正常插入
2 redis 事务
2.1redis命令是原子性的,事务不是原子性的
exec
,所有命令都不会执行exec
,正确命令会被执行,错误命令抛出异常3.如果开启事务,操作不会被立即执行,将会返回null值
3.0 mysql 和 redis 事务
3.1 Redis事务与MySQL事务的区别