Redis事务
一.事务的四个特性
二.Redis的事务命令
三.Redis不支持回滚
一.事务的四个特性
1.1 隔离性:事务正在操作的数据,不会被其他事务修改
1.2 原子性:一组命名要么全部执行要么全部不执行
1.3 一致性:数据的每一次修改都会是数据库更改一次数据库状态;
读一致性:
两个事务在进行读操作时,基于同一个数据库状态(一般是最新的),不能基于多个。
写一致性:
一个状态下(一般是最新的),只能有一个事务在写。
1.4 持久性:数据在修改后应该被永久保存,一般需要备份和恢复机制来保证。
二.Redis的事务命令
2.1 MULTI
标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
2.2 DISCARD
取消事务,放弃执行事务块内的所有命令。
2.3 EXEC
执行所有事务块内的命令
2.4 WATCH
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
注意:在事务开始之前执行
2.5 UNWATCH
取消 WATCH 命令对所有 key 的监视。
注意:该命令在MULTI,DISCARD,EXEC之后的话均无效,只有紧跟WATCH之后才生效。
三.Redis不支持回滚
原因如下:
3.1 操作失败的原因只可能是语法错误或者错误的数据库类型操作,这些都是在开发层面能发现的问题不会进入到生产环境,因此不需要回滚。
3.2 Redis内部设计推崇简单和高性能,因此不需要回滚能力。
据实而说第一条说法感觉有点站不住脚,可以想象得到Redis操作失败的原因绝对不止语法层面的错误,特别是一些像依赖操作系统、文件系统的操作。第二条说法更实在,Redis的应用场景明显不是为了数据存储的高可靠而设计的,而是为了数据访问的高性能而设计,设计者为了简单性和高性能而部分放弃了原子性。