Redis事务与MySQL事务的区别

2022/3/28 19:23:09

本文主要是介绍Redis事务与MySQL事务的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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命令是原子性的,事务不是原子性的

  1. 若事务队列中存在命令错误(类似java编译性错误),执行exec,所有命令都不会执行
  2. 若事务中存在语法错误(类似java 1/0的运行时异常),执行 exec,正确命令会被执行,错误命令抛出异常

   3.如果开启事务,操作不会被立即执行,将会返回null值

3.0 mysql 和 redis 事务 

  3.1  Redis事务与MySQL事务的区别

  



这篇关于Redis事务与MySQL事务的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程