009_Redis的事物
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的事物相关推荐
- mysql 字段扩容_解决DB2事物日志满、扩充表字段长度和表空间的命令
一.通常我们在使用db2导入数据或进行别的操作时会遇到事物日志已满的情况,导致操作无法继续. 在windows系统中,我们可先db2 get db cfg for dbname(要修改的数据库名) 来 ...
- 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC
推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...
- iOS FMDB之FMDatabaseQueue(事物与非事物)
事物与非事物 事物是一个并发控制的基本单元,所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 事物与非事物,简单的举例来说就是,事物就是把所有的东西打包在一 ...
- Mysql 索引 事物
索引 针对庞大数据 加速查询 缺点 占用空间 分类: 普通索引: 通过 index 创建 唯一索引: 就是 unique key 主键索引: 就是 primary key 联合索引(多列)" ...
- JFinal 源码导读第八天(1) Db.tx 事物
为什么80%的码农都做不了架构师?>>> 1.接上面的事物介绍 /*** IAtom support transaction of database.* It can be i ...
- @Transactional-同一个类中方法自调,调用方法事物失效
问题分析 一个类中的方法调用另一个事物传播性为创建事物的方法,调用的方法事物失效? SpringAOP 代理的Service对象调用了其方法,这个方法再去调用这个Service中的其他方法是没有使用A ...
- jpa SessionFactory事物失效
前言: 因为项目中使用jpa的SessionFactory用@Autowired的方式来操作Hibernate的Session,死活开不了事物,最后终于在一篇博客的帮助下,了解到使用SessionFa ...
- jdbc事物回滚是否需要重新commit 不需要
.... Connection con = null; Statement st = null; try{ Class.forName("oracle.jdbc.driver.Ora ...
- 付睿:对新事物的追寻之旅 | 优秀毕业生专访
[ 导读 ] 清华-青岛数据科学研究院(以下简称"数据院")自2014年4月成立以来,秉承"学校统筹,问题引导,社科突破,商科优势,工科整合,业界联盟"24字指 ...
最新文章
- Android -- Annotation(注解)原理详解及常见框架应用
- mysql killed 不掉,解决:kernel: Out of memory: Killed process 15967, UID 27, (mysqld).
- 关于NSString和NSMutableString的retainCount
- qt 的mysql的库
- volatile 和 atomic 原子性的区别和联系
- springboot14 整合JDBC
- 深度学习2.0-37.循环神经网络层
- Data Science With R In Visual Studio
- 开源.net 混淆器ConfuserEx介绍
- Excel for mac 快速选中大量的数据
- jquery点击按钮删除文本框的内容
- 解读一淘网(etao)首页响应式兼容ie6~ie8实现方法
- layui设置按钮不可点击_layui upload 模块点击选择文件按钮的禁用与启用功能
- 2016-8-17晨型养成第二天
- 类设计原则及设计模式(一篇就够)
- 台式电脑开启休眠模式(win10)
- c++中的类成员函数指针
- The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)
- SqlServer狂吃内存不释放解决办法
- 5.2.3案例小猪称体重