Redis事务与管道

一. 管道pipeline

使用 pipelined()获取管道,后续把命令缓存下来

注:管道方式,最后必须要执行运行方法也就是syncAndReturnAll类似的方法,否则不会执行

二. 事务tx

和管道有点类似,都是缓存命令,然后在执行方法一起执行

1.开启multi(),中间执行命令,在执行exec()方法时,一起执行.如果前面有监视也就是watch();如果监视的值被该变,那么下面的语句不会执行.

2.不开启multi(),执行命令,不管有没有监视都会执行完毕.

流程:先开启事务,获得事务对象tx,在通过事务对象tx进行命令缓存,最后进行exec方法,如果为null说明没有执行.

流程图:

Redis事务与管道_第1张图片

三. 事务和管道的区别

事务与pipeline都是不支持回滚;中间命令出现错误,不会影响前面已经执行成功的命令,也不会中断后面的命令继续执行; 事务可以实现原子性和隔离性.管道执行不管中间有没有出错命令都会全部执行一遍,事务有一个出错,后面命令不会执行.

注:redis集群时,不支持事务(可以考虑lua脚本)

你可能感兴趣的:(redis,缓存,数据库)