Redis 事务
关系型数据中的事务都是原子性的,而redis 的事务是非原子性的。
Redis事务相关命令:
- MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。
- EXEC:执行事务中的所有操作命令。
- DISCARD:取消事务,放弃执行事务块中的所有命令。
- WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
- UNWATCH:取消WATCH对所有key的监视。
DB事务和 redis事务对比
一致性(Consistency) | 隔离性(Isolation) | 持久性(Durability) | 原子性(Atomicity) | |
---|---|---|---|---|
mysql | 支持 | 支持 | 支持 | 支持 |
redis | 支持 | 支持 | 不支持 | 不支持 |
事务演示
执行执行一组事务命令
其中一条命令执行错误,后续的命令还是会继续执行。比如对string类型进行incr
操作,并没有语法错误,但是会产生一个异常
基于WATCH对于事务作中断测试
客户端<1>
客户端<2>
总结:
1、当监控的key被其中一个事务修改后,那么另一个事务的执行将会被打断
2、n个事务事务开启,谁先exec谁成功,后面的exec会被打断