Redis 事务

关系型数据中的事务都是原子性的,而redis 的事务是非原子性的。

Redis事务相关命令:

  • MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。
  • EXEC:执行事务中的所有操作命令。
  • DISCARD:取消事务,放弃执行事务块中的所有命令。
  • WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
  • UNWATCH:取消WATCH对所有key的监视。

DB事务和 redis事务对比

一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 原子性(Atomicity)
mysql 支持 支持 支持 支持
redis 支持 支持 不支持 不支持

事务演示

执行执行一组事务命令

img

其中一条命令执行错误,后续的命令还是会继续执行。比如对string类型进行incr操作,并没有语法错误,但是会产生一个异常

基于WATCH对于事务作中断测试

客户端<1>

img

客户端<2>

img

总结:

1、当监控的key被其中一个事务修改后,那么另一个事务的执行将会被打断

2、n个事务事务开启,谁先exec谁成功,后面的exec会被打断