Redis 事务
1. 什么是Redis 事务?
事务提供将多个命令请求打包,然后一次性,按顺序的执行多个命令。
2. 事务的阶段
- 事务开始
- 命令入队
- 准备执行
3. 什么是Watch?
watch 观察Redis 中的多个键,如若有一个键被修改,则事务执行失败。
4. Watch 的实现原理
Redis 数据库中保存着被watch的键的列表,如果某个键被watch 了,而且在事务提交前被修改了,那么watch这个键值的客户端的REDIS_DIRTY_CAS被打开,表示该客户端的事务安全性已经被破坏。事务执行失败。
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 不具有耐久性,