1. Redis事务可以一次执行多个命令, 并且带有以下三个重要的保证:

1.1. 批量操作在发送exec命令前被放入队列缓存。

1.2. 收到exec命令后进入事务执行, 事务中任意命令执行失败, 其余的命令依然被执行。

1.3. 在事务执行过程, 其他客户端提交的命令请求不会插入到事务执行命令序列中。

2. 一个事务从开始到执行会经历以下三个阶段:

2.1. 开始事务。

2.2. 命令入队。

2.3. 执行事务。

3. 单个Redis命令的执行是原子性的, 但Redis没有在事务上增加任何维持原子性的机制, 所以Redis事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本, 但批量指令并非原子化的操作, 中间某条指令的失败不会导致前面已做指令的回滚, 也不会造成后续的指令不做。

4. watch命令

4.1. watch命令用于监视一个(或多个)key, 如果在事务执行之前这个(或这些)key被其他命令所改动, 那么事务将被打断。

4.2. 语法: watch key [key ...]。

4.3. 总是返回OK。

5. unwatch命令

5.1. unwatch命令用于取消watch命令对所有key的监视。

5.2. 语法: unwatch。

5.3. 总是返回OK。

6. multi命令

6.1. multi命令用于标记一个事务块的开始。

6.2. 事务块内的多条命令会按照先后顺序被放进一个队列当中, 最后由exec命令原子性(atomic)地执行。

6.3. 语法: multi。

6.4. 总是返回OK。

7. exec命令

7.1. exec命令用于执行所有事务块内的命令。

7.2. 语法: exec。

7.3. 假如某个key(或某些)正处于watch命令的监视之下, 且事务块中有和这个(或这些)key相关的命令, 那么exec命令只在这个(或这些)key没有被其他命令所改动的情况下执行并生效, 否则该事务被打断(abort)。

7.4. 事务块内所有命令的返回值, 按命令执行的先后顺序排列。 当操作被打断时, 返回空值nil。

7.5. 一个带监听的正常事物流程

7.6. 一个带监听的被打断的时候流程

7.6.1. 客户端一

7.6.2. 客户端二

8. discard命令

8.1. discard命令用于取消事务, 放弃执行事务块内的所有命令。

8.2. 如果正在使用watch命令监视某个(或某些)key, 那么取消所有监视, 等同于执行命令unwatch。

8.3. 语法: discard。

8.4. 总是返回OK。

009_Redis的事物相关推荐

  1. mysql 字段扩容_解决DB2事物日志满、扩充表字段长度和表空间的命令

    一.通常我们在使用db2导入数据或进行别的操作时会遇到事物日志已满的情况,导致操作无法继续. 在windows系统中,我们可先db2 get db cfg for dbname(要修改的数据库名) 来 ...

  2. 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC

    推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...

  3. iOS FMDB之FMDatabaseQueue(事物与非事物)

    事物与非事物 事物是一个并发控制的基本单元,所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 事物与非事物,简单的举例来说就是,事物就是把所有的东西打包在一 ...

  4. Mysql 索引 事物

    索引 针对庞大数据 加速查询 缺点 占用空间 分类: 普通索引: 通过 index 创建 唯一索引: 就是 unique key 主键索引: 就是 primary key 联合索引(多列)" ...

  5. JFinal 源码导读第八天(1) Db.tx 事物

    为什么80%的码农都做不了架构师?>>>    1.接上面的事物介绍 /*** IAtom support transaction of database.* It can be i ...

  6. @Transactional-同一个类中方法自调,调用方法事物失效

    问题分析 一个类中的方法调用另一个事物传播性为创建事物的方法,调用的方法事物失效? SpringAOP 代理的Service对象调用了其方法,这个方法再去调用这个Service中的其他方法是没有使用A ...

  7. jpa SessionFactory事物失效

    前言: 因为项目中使用jpa的SessionFactory用@Autowired的方式来操作Hibernate的Session,死活开不了事物,最后终于在一篇博客的帮助下,了解到使用SessionFa ...

  8. jdbc事物回滚是否需要重新commit 不需要

    .... Connection con = null; Statement st = null; try{     Class.forName("oracle.jdbc.driver.Ora ...

  9. 付睿:对新事物的追寻之旅 | 优秀毕业生专访

    [ 导读 ] 清华-青岛数据科学研究院(以下简称"数据院")自2014年4月成立以来,秉承"学校统筹,问题引导,社科突破,商科优势,工科整合,业界联盟"24字指 ...

最新文章

  1. Android -- Annotation(注解)原理详解及常见框架应用
  2. mysql killed 不掉,解决:kernel: Out of memory: Killed process 15967, UID 27, (mysqld).
  3. 关于NSString和NSMutableString的retainCount
  4. qt 的mysql的库
  5. volatile 和 atomic 原子性的区别和联系
  6. springboot14 整合JDBC
  7. 深度学习2.0-37.循环神经网络层
  8. Data Science With R In Visual Studio
  9. 开源.net 混淆器ConfuserEx介绍
  10. Excel for mac 快速选中大量的数据
  11. jquery点击按钮删除文本框的内容
  12. 解读一淘网(etao)首页响应式兼容ie6~ie8实现方法
  13. layui设置按钮不可点击_layui upload 模块点击选择文件按钮的禁用与启用功能
  14. 2016-8-17晨型养成第二天
  15. 类设计原则及设计模式(一篇就够)
  16. 台式电脑开启休眠模式(win10)
  17. c++中的类成员函数指针
  18. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)
  19. SqlServer狂吃内存不释放解决办法
  20. 5.2.3案例小猪称体重

热门文章

  1. 管理序列+序列的伪列+修改序列+删除序列
  2. 三张图看遍Linux 性能监控、测试、优化工具
  3. 大前端晋级系列之-策略模式
  4. View Horizon Mirage安装手册(一)——Horizon Mirage介绍
  5. HP-Unix安装Memcache问题
  6. 下防火墙命令与centos7下防火墙命令区别
  7. 成都服务器怎么租用最便宜—Vecloud
  8. 项目Alpha冲刺 10
  9. Hbuilder开发HTML5 APP之打开新页面
  10. Linux Versus Windows, Ubuntu/Mint V XP/Vista/7