首页 > 其他 > 详细

Redis-事务

时间:2021-08-29 20:07:47      阅读:20      评论:0      收藏:0      [点我收藏+]

是什么

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行执行而不会被其他命令插入,不许加塞。

常用命令

  • MULTI
  • EXEC
  • DISCARD
  • WATCH

五个case

  1. 正常执行

    使用MULTI命令输入Redis事务。该命令始终以答复OK。此时,用户可以发出多个命令。Redis不会执行这些命令,而是将命令放入队列中。一旦调用EXEC,将执行所有命令。

    > MULTI
    OK
    > INCR foo
    QUEUED
    > INCR bar
    QUEUED
    > EXEC
    1) (integer) 1
    2) (integer) 1
    
  2. 放弃事务

    可以使用DISCARD来中止事务。在这种情况下,不执行任何命令,连接状态恢复为正常。

    > SET foo 1
    OK
    > MULTI
    OK
    > INCR foo
    QUEUED
    > DISCARD
    OK
    > GET foo
    "1"
    
  3. 全体连坐

    命令无法进入加入到队列,执行exec命令后会终止所有命令

  4. 冤头债主

    命令正常加入队列中,在exec命令执行后发生错误,会正常执行其他正确命令

  5. watch监控

    WATCH用于为Redis事务提供Check And Set(CAS)行为,防止加塞修改。
    监控被watch的键,在exec命令之前任何一次修改了被监视的键,则整个事务中止。exec命令返回null
    一旦执行exec命令,之前所加的监控锁都会被取消

    小总结:watch指令,类似于乐观锁,事务提交时如果Key的值已经被改变,整个事务便都不会执行。通过watch命令监控了多个Key其中任意有一个Key的值被修改,exec命令执行的事务都将被放弃。

三阶段

  • 开启 通过MULTI开始一个事务
  • 入队 将多个命令加入队列中
  • 执行 通过EXEC命令触发事务

三特性

  • 单独隔离操作

    事务中的命令会序列化、按顺序地执行。事务执行过程不会被其他客户端命令打断

  • 没有隔离级别概念

    队列中的命令在exec事务触发之前不会被实际执行

  • 不保证原子性

    当命令成功被加入到队列之后,在exec命令触发事务之后发生执行失败,其他命令还是会正常执行,不会回滚。

Redis-事务

原文:https://www.cnblogs.com/baojiong/p/redisshi-wu.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!