Redis 事务

1. 什么是Redis 事务?

事务提供将多个命令请求打包,然后一次性,按顺序的执行多个命令。

2. 事务的阶段

  1. 事务开始
  2. 命令入队
  3. 准备执行

3. 什么是Watch?

watch 观察Redis 中的多个键,如若有一个键被修改,则事务执行失败。

4. Watch 的实现原理

Redis 数据库中保存着被watch的键的列表,如果某个键被watch 了,而且在事务提交前被修改了,那么watch这个键值的客户端的REDIS_DIRTY_CAS被打开,表示该客户端的事务安全性已经被破坏。事务执行失败。


手动实现redisson的watchdog实现 redis watch原理_数据库


5. 如何理解Redis 事务的ACID?

5.1 原子性

  • 原子性是指数据库把事务中的多个操作当做一个整体来执行,要么执行所有操作,要么一个也不执行。
  • Redis不支持事务回滚机制。

5.2 一致性

  • 一致性是指如果数据库正在执行事务之前是一致的,那么事务执行之后,无论事务是否执行成功,数据库也应该是一致的。
  • 一致是指数据符合数据库本身的定义和要求,没有包含非法或者无效的错误数据。
5.2.1 Redis 如何保证一致性?
  • 入队错误。
    如果一个事务在入队命令的过程中,出现了命令不存在或者命令格式不正确等状况,整个事务拒绝执行。
  • 执行错误
    执行期间发生的错误不会影响事务中其他操作的进行。
  • 服务停机
  • 无持久化 重启空白,不影响一致性
  • RDB 还原后的状态不影响一致性
  • AOF 不影响一致性。

5.3 隔离性

  • 隔离性是指数据库有多个事务并发进行,各个事务之间不会影响。
  • Redis 是单线程模式,串行执行。

5.4 耐久性

  • 耐久性是指一个事务执行完毕时,执行姐夫哦保存到了永久性存储介质中,即使停机,结果不会丢失。
5.4.1 Redis 的耐久性?
  • 无持久化的时候,没有耐久性。
  • RDB 不具有耐久性
  • AOF 且appendfsync = always , 就有耐久性
  • AOF , appendsync = everysecond 不具有耐久性,