您当前的位置: 首页 >  redis

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Redis高级 之 事务

梁云亮 发布时间:2019-11-03 10:38:02 ,浏览量:1

Redis高级 之 事务

Redis事务的本质是一组命令的集合。

Redis的事务分为以下三个阶段:

  • 开启:以MULTI开始一个事务
  • 入队:将多个命令入队到事务中,这些命令并不会立即执行,而是放到等待执行的事务队列里面,最后一起执行
  • 执行:由EXEC命令触发事务

Redis事务相关命令:

  • multi:标记一个事务块的开始。
  • exec:开始执行事务块内的所有命令。
  • discard:取消事务,放弃执行事务块内的所有命令。
  • watch key [key …]:监视一个(多个) key ,如果在事务执行之前这些key中的任意一个被其他命令所改变,那么事务将被打断,这种情况通常可以在程序中重新尝试一次。
  • unwatch:取消 watch 命令对所有 key 的监视。
示例1:
  1. multi:标记一个事务块的开始 在这里插入图片描述
  2. discard:取消事务,放弃执行事务块内的所有命令 在这里插入图片描述
  3. exec:执行事务块内的所有命令 3.1 全体连坐(语法有问题,编译时就出错) 在这里插入图片描述 3.2 冤头债主(语法没有问题,运行时才出错) 在这里插入图片描述
示例2:模拟信用卡可用余额及支出。用balance表示余额,用debt表示支出,两者数据应该一致:

第一步:打开客户端A,在其中初始化余额和支出,在事务中间完成一次25元的消费,采用先监控再开启的方式,同时保证两笔金额变动在同一个事务内,如下图所示: 在这里插入图片描述 第二步:在客户端A中,再次监视余额balance,如下图所示: 在这里插入图片描述 第三步:再打开一个客户端B,在其中给余额增加500元,如下图所示: 在这里插入图片描述 第三步:在客户端A中再做一次25元的消费,如下图所示: 在这里插入图片描述 上面代码说明,监控了key的情况下,如果key在别的进程中被被修改了,后面一个事务的执行失效。

第三步若采用unwatch,则会正确远行,如下图所示: 在这里插入图片描述

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0501s