redis事务

什么是事务?
很多件事情按顺序一起执行,都成功了,就算完成了事务,否则就恢复如初,像没有执行过一样。

SET A 1000
SET B 2000
DECRBY A 100 (step 1)
INCRBY B 100 (step 2)

如果step1政策执行,step2发生异常那么
A 结果为 900
B 结果为 1000

自认为正确的解决方式

MULTI 
DECRBY A 100
INCRBY B 100
EXEC

然而实际上

MUlTI
SET a 100
INCRY b 1.22 (此行会报错)
SET a 200
EXEC

SET a 200 依然会被执行

MULTI 开始一个事务,将事务加入执行队列
EXEC 执行事务

Redis的事务并不是原子的,它并不支持回滚
使用DISCARD可以取消事务

MULTI
SET a 100
DISCARD

watch指令:

命令用于监视一个(或多个) key ,
如果在事务执行之前这个(或这些) key 被其他命令所改动,
那么事务将被打断
SET a 1
WATCH a 
SET a 2
MULTI
SET a 3
EXEC
GET a

结果 : a = 2
因为之前执行了watch在后面的事务中,a的值将保持2,
使用UNWATCH可取消监控

你可能感兴趣的:(redis事务)