Redis事务的三个阶段
- 开启事务
- 命令入队列
- 执行事务
Redis事务的三个特性
- 单独的隔离操作:事务中所有命令会按顺序执行,不会被其他命令打断
- 没有隔离级别的概念:在提交之前,任何事物都不会被实际执行。而mysql中,事务提交之前命令就已经执行,mysql根据执行的结果决定是否回滚。
- 不保证原子性:事务中有错误的命令,其他命令仍可以执行,不会回滚。
Redis对事务的支持是部分的。
multi:redis事务开启
exce:执行事务
- 如果事务中有错误的命令,则所有的命令都不执行
- 如果事务中有正确但执行时会出错的命令(例如对String类型执行incr操作),则其他正确的命令可以执行。
MULTI
set k1 v1
set k2 v2
incr k1
EXCE
虽然incr k1命令会报错,但事务可以执行,能添加新值 k1-v1,k2-v2。
MULTI
set k1 v1
set k2 v2
getset k1
EXCE
由于事务中存在错误命令 getset k1 ,因此事务执行失败。
WATCH:监控一个或多个key,如果在事务执行之前这个key被改变,则事务将被打断。类似乐观锁。
UNWATCH:取消WATCH命令对所有key的监视。
WATCH balance
MULTI
decrby balance 20
incrby debt 20
EXCE
如果在WATCH指令之后到执行事务之前,被监控的balance都没有改变的话,则事务执行成功。如果已知监控变量发生了修改,可以用UNWATCH取消监控。