Redis事务机制--基本命令与ACID
一、redis事务基本命令
1、multi与exec命令
用multi开启一个事务,执行多条命令入队到事务中,最后由exec命令触发事务,执行事务中的所有命令
2、discard命令
discard命令用于取消事务,清空事务中的队列,将客户端调整为非事务状态
3、watch命令
watch命令用于在事务开启之前监视任意数量的键,当调用exec命令执行食物是,若该键被其他客户端修改,那么整个 事务不再执行,直接返回失败
4、redis执行事务过程原理图解
二、redis事务之ACID
1、原子性(atomicity)(操作要么都执行要么都不执行)
单个的redis命令的执行是原子性额,但redis没有在事务上增加任何维持原子性的机制,所以redis事务的执行不是原子性的
如果一个事务队列中的所有命令都被成功执行,那么称这个事务执行成功。
2、一致性(consistency)(应满足完整性约束)
入队错误:在命令入队过程中,如果客户端向服务端发送了错误的命令,比如命令的参数数量不对等,那么服务器将返回一 个错误信息,并将客户端的事务状态设为REDIS_DIRTY_EXEC
执行错误:命令在事务执行过程中发生错误,比如对一个不同类型的key执行了错误操作,那么redis只会将错误包含在事务 结果中,不会引起事务中断或失败,也不会影响已执行事务的结果,故对事务的一致性没影响
3、隔离性(isolation)
WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他 客户端修改了, 那么整个事务不再执行, 直接返回失败。
4、持久性(durability)
因为事务只是用队列包裹一组redis命令,并没有提供任何额外的持久性功能,所以事务的持久性功能由redis所使用的持久化 模式决定 【redis持久化模式:rdb(数据内存备份)、aof(append only if增量备份,每隔一秒做一次备份)】