title: 【学习之路】Redis事务
draft: true
tags:


Reids事务介绍

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞

Redis事务相关的命令

  1. DISCARD:取消事务块内的命令
  2. EXEC:执行所有事务块内的命令
  3. MULTI:标记一个事务块的开始
  4. UNWATCH:取消WATCH命令对所有key的监视
  5. WATCH key key:监视一个或多个key,如果在事务执行之前这写key,被其他命令所改动,那么事务将会被打断

正常执行

使用MULTI开始事务可以执行添加或者获取操作,不限制语法规则,此时所有操作都是入队并没有真正执行,再次输入EXEC事务执行

RedisTransactions - 图1

放弃事务

使用MULTI开始事务,进行修改操作如果想放弃事务输入DISCARD就会放弃事务所有入队的值将不会被修改

RedisTransactions - 图2

全体连坐

使用MULTI开始事务,进行set操作,如果有些操作出现报错那么EXEC结束事务时也会报错,并且所有事务都不会执行

RedisTransactions - 图3

冤头债主

使用MULTI开始事务,进行操作如果不是直接抛出的错误那么在EXEC结束事务时,会抛出异常,但是其他没有问题的数据可以正常执行

RedisTransactions - 图4

watch监控

Watch指令,类似乐观锁,事务提交时,如果Key的值已被别的客户端改变,整个事务队列都不会执行

通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃。

总结

  1. 单独的隔离操作:事务中所有命令都会序列化、按顺序地执行。事务在执行过程中,不会被其他客户端发送古来的命令请求所打断
  2. 没有隔离级别的概念:列队中的命令没有提交之前都不会实际的被执行。
  3. 不保证原子性:redis同一个事务中如果有一条命令执行失败,其他后面的命令任然会被执行,不会进行回滚操作