美文网首页
redis的事务控制

redis的事务控制

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-05-26 08:06 被阅读0次

    redis的事务控制。

    问个最简单的问题:redis有事务吗?

    答:有。

    再问个问题:redis事务能保证操作的原子性吗?

    答:不能。

    为什么不能保证原子性呢?

    ……

    要搞清楚这个问题,需要先看redis事务命令。

    multi:开始事务。

    exec:执行事务(为什么不是提交事务啊)。执行过程中如果报错,不会回滚,后面的逻辑还会执行。

    discard:丢弃事务(为什么不是回滚事务啊)。丢弃事务指的是,丢弃事务缓存队列中的所有指令。

    看到了吧,是因为exec执行的过程中如果有异常,后面的操作还会继续执行。也就是说redis不会回滚。

    redis为什么要这样设计呢?

    redis为什么不支持回滚呢?

    我们看看网友的观点,下面这段内容就是网上的观点,基本上代表了大部分人的观点。

    Redis命令在事务中可能会执行失败,但是Redis事务不会回滚,而是继续会执行余下的命令。如果您有一个关系型数据库的知识,这对您来说可能会感到奇怪,因为关系型数据在这种情况下都是会回滚的。

    Redis这样做,主要是因为:

    第一点:执行就是要成功,之所以失败,那是程序性问题。只有当发生语法错误(这个问题在命令队列时无法检测到)了,Redis命令才会执行失败, 或对keys赋予了一个类型错误的数据:这意味着这些都是程序性错误,这类错误在开发的过程中就能够发现并解决掉,几乎不会出现在生产环境。

    第二点:为了提高速度。由于不需要回滚,这使得Redis内部更加简单,而且运行速度更快。

    对于第一点我有一个疑问:为什么都是程序性问题,也有可能是网络问题啊?难道也不考虑网络问题吗?还是说redis的命令不存在网络问题?

    相关文章

      网友评论

          本文标题:redis的事务控制

          本文链接:https://www.haomeiwen.com/subject/owtxtctx.html