创建事务
# 实例1 只要不exec执行 num都是初始值
# 设置键值
set num 0
# 监视键值
watch num
# 开启事务
multi
# 需要处理数据的命令
incr num
incrby num 10
# 执行事务
exec
# 实例2 因为watch后键值已经在窗口2被改动过,所以窗口1执行exec就无法成功
# 窗口1
set num 0
watch num
multi
set num 1000
incrby num 500
# 窗口2
get num # 0
set num 50
# 窗口1
exec
get num # 50
redis并没有事务回滚机制,所以并不能保证原子性
事务在没有提交执行前,是可以取消事务的,如果事务已经提交执行,就无法取消了
取消事务
# 实例,事务在没有提交执行前,是可以取消事务的,如果事务已经提交执行,就无法取消了
# 设置键值
set num 0
# 开启监视
watch num
# 开启事务
multi
set num 100
# 取消事务
discard
# 此时再执行exec就会报错提示没有开启事务
exec
# 此时获取num会看到还是0
get num # 0