一. 管道pipeline
使用 pipelined()获取管道,后续把命令缓存下来
注:管道方式,最后必须要执行运行方法也就是syncAndReturnAll类似的方法,否则不会执行
二. 事务tx
和管道有点类似,都是缓存命令,然后在执行方法一起执行
1.开启multi(),中间执行命令,在执行exec()方法时,一起执行.如果前面有监视也就是watch();如果监视的值被该变,那么下面的语句不会执行.
2.不开启multi(),执行命令,不管有没有监视都会执行完毕.
流程:先开启事务,获得事务对象tx,在通过事务对象tx进行命令缓存,最后进行exec方法,如果为null说明没有执行.
流程图:
三. 事务和管道的区别
事务与pipeline都是不支持回滚;中间命令出现错误,不会影响前面已经执行成功的命令,也不会中断后面的命令继续执行; 事务可以实现原子性和隔离性.管道执行不管中间有没有出错命令都会全部执行一遍,事务有一个出错,后面命令不会执行.
注:redis集群时,不支持事务(可以考虑lua脚本)