1.关系型数据库的事务:要么全部成功,要么全部失败的一组操作(程序运行的最小执行单元);包括:声明式事务,注解式事务(给类或方法注解)
2.Redis事务:当你开启了事务之后,下面所执行的所有命令,都在排队执行的状态,当你提交时,会按照命令的顺序一次执行
1 127.0.0.1:6379> multi 2 OK 3 127.0.0.1:6379> set name 24 4 QUEUED(队列,排队的意思,待执行,还没有执行) 5 127.0.0.1:6379> incr name 6 QUEUED 7 127.0.0.1:6379> exec 8 1) OK 9 2) (integer) 25
3.MYSQL事务:
开启事务:start transaction
提交事务:commit
回滚事务:rollback
4.Redis事务:
multi:开启
exec:提交事务(execution的缩写)
discard:回滚事务(没提交一直是不变的)(就是取消事务,放弃执行事务块内的所有命令)
1 127.0.0.1:6379> get name 2 "25" 3 127.0.0.1:6379> multi 4 OK 5 127.0.0.1:6379> incrby name 2 6 QUEUED 7 127.0.0.1:6379> incrby name 3 8 QUEUED 9 127.0.0.1:6379> discard 10 OK(因为是回滚事务,所以那些命令都没有执行) 11 127.0.0.1:6379> get name 12 "25"(只要没提交事务,都是不变的)
5.Redis事务执行期间,Redis不会再为其它客户端的请求提供任何服务
watch:监测事务
unwatch:取消监测
1 127.0.0.1:6379> watch name(先监测事务)(连接的客户端一) 2 OK 3 127.0.0.1:6379> multi 4 OK 5 127.0.0.1:6379> incrby name 2 6 QUEUED 7 127.0.0.1:6379> exec 8 1) (integer) 33
1 127.0.0.1:6379> watch name(连接的客户端二) 2 OK 3 127.0.0.1:6379> multi 4 OK 5 127.0.0.1:6379> incrby name 10 6 QUEUED 7 127.0.0.1:6379> exec(客户端一先提交了,所以客户端二没有被提供任何服务) 8 (nil)
6.在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行
1 127.0.0.1:6379> get name 2 "35" 3 127.0.0.1:6379> multi 4 OK 5 127.0.0.1:6379> incrby name 6 6 QUEUED 7 127.0.0.1:6379> incrby name 3 8 QUEUED 9 127.0.0.1:6379> incrby name aaa(错误的命令) 10 QUEUED 11 127.0.0.1:6379> incrby name 4 12 QUEUED 13 127.0.0.1:6379> exec 14 1) (integer) 41 15 2) (integer) 44 16 3) (error) ERR value is not an integer or out of range 17 4) (integer) 48(之后的仍然执行) 18 127.0.0.1:6379>
原文:https://www.cnblogs.com/liujinqq7/p/12386479.html