Redis事务介绍
简介
Redis 事务就是一组命令的集合,在事务提交时一次性顺序执行,其他客户端提交的命令不会插入到事务执行队列中。
一次性、顺序性、排他性
Redis事务没有隔离级别,事务中的命令被加入执行队列时,并不会实际执行,只有提交了事务才会执行,此时事务内的查询无法看到之前事务内的更新
相关命令
watch key1 key2 … : 监视一或多个key,如果在事务提交之前,被监视的key发生改动,则事务执行失败 ( 类似乐观锁 )
multi : 开始一次事务
exec: 执行事务
discard : 取消事务,放弃执行事务中的所有命令
unwatch : 取消watch对所有key的监控
Redis事务不保证原子性
当事务中有异常发生时,可能全部失败,也可能部分失败
部分失败的情况
当事务队列中有命令出现逻辑错误时,其余命令可以正常执行
例:incr了一个非数字
全部失败的情况
当Redis命令出现语法错误时,事务队列中所有命令都不会成功执行
Watch实现乐观锁
使用watch监听相应的键,这样在事务执行时,若正在监听的键值发生改变时,则事务执行失败,所有命令都不生效
第二个连接在事务未执行时修改了money的值,则该事务全部失败
当然事务执行完毕别忘了解除所有监听