Redis教程

Redis事务

本文主要是介绍Redis事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. redis事务概念:

可以一次执行多个命令,本质是一组命令的集合。
一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性、顺序性、排他性的执行一系列命令。

2. 5个常用命令:

【1】MULTI: 标记一个事务块的开始

【2】EXEC: 执行事务块中所有的命令

【3】DISCARD: 取消事务,放弃执行事务块内的所有命令

【4】WATCH key[key ...]:
监视一个(或多个)key,如果在事务执行过程中这个key被修改了(如果 exec 返回的结果是 nil 时,表示 watch 监控的对象在事务执行的过程中被修改了),那么事务将被打断,终止执行
watch 命令只能在客户端开启事务之前执行,在事务中执行 watch 命令会引发错误,但不会造成整个事务失败

【5】UNWATCH: 取消之前WATCH命令监视的所有key
事务之前watch监视k, 开始事务, unwatch, 设置k值, exec执行事务
即使在事务的执行过程中,k 值被修改了,因为调用了 unwatch 命令,整个事务依然会顺利执行

3. 4种执行情况:

【1】正常执行

【2】放弃事务

【3】全体连坐(命令中含有语法错误的,均连坐(全部失败))

【4】冤有头,债有主(运行时错误,非语法错误,命令正确的语句正常执行,错误语句返回错误)

4. 执行的3个阶段:

【1】开启:以MULTI开始一个事务

【2】入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面

【3】执行:由EXEC命令触发事务

5. Redis事务3个特性:

【1】单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

【2】没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在 ”事务内的查询要看到事务里的更新,在事务外查询不能看到” 这个让人万分头痛的问题。

【3】不保证原子性:redis 同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚。

 

这篇关于Redis事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!