事务
redis支持事务,比如三个KEY的同时修改可以在同一个事务中执行。但是redis的事务与我们接触的关系型数据库事务不一样。
1.事务中命令包含语法错误,整个事务所有命令都不执行
2.事务中命令没有语法错误,但执行时有命令失败,不影响事务中其他命令执行
3.事务不支持回滚
针对2、3两个特点,一旦发生运行时错误,需要开发者自己收拾烂摊子,在开发的时候就做好规划避免出现运行时错误。
事务命令:
multi
set key1 value
set key2 value
set key3 value
exec
WATCH
使用watch命令之后,如果修改了key(包括删除),redis会阻止下一次事务的修改,这一点和zookeeper的监听很类似,都是单次设置单次使用,一旦触发必须重新设置watch
举例:
client1:
client2:
可以看到client1事务内的命令没有执行成功,说明watch起了作用
所以针对这种情况,程序需要根据返回值重新调用
注:事务中修改的key只要其中一个因为watch执行失败,不论其他是否设置了watch,则全部失败。