Redis教程入门到精通-互联网分布式技术教程(8)

73 阅读3分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战

通常我们提及数据库都不可避免的要提到事务,那么什么是事务呢?事务是指作为单个逻辑工作单元执行的一系列操作。所以,首先事务是一系列操作,这一系列操作具有二态性,即完全地执行或者完全地不执行。因此事务处理可以确保除非事务单元内的所有操作的成功完成,否则不会想数据库更新面向数据的资源。下面就来介绍一些Redis的事务相关知识。

14、Redis的事务

1) Redis的事务

Redis的事务允许在一次单独的步骤中执行一组命令,并且能够保证将一个事务中的所有命令序列化,然后按顺序执行;在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。即Redis的事务要能够保证序列化和原子性。

2)Redis事务的常用命令:

1.1 multi

语法:multi

功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。

返回值:开启成功返回OK

image.png

1.2 exec

语法:exec

功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。

如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;

如果在压队列的过程中正常,在执行队列中某一个命令报错,则只会影响本条命令的执行结果,其它命令正常运行;

当使用WATCH命令时,只有当受监控的键没有被修改时,EXEC命令才会执行事务中的命令;而一旦执行了exec命令,之前加的所有watch监控全部取消。

返回值:这个命令的返回值是一个数组,其中的每个元素分别是原子化事务中的每个命令的返回值。 当使用WATCH命令时,如果事务执行中止,那么EXEC命令就会返回一个Null值。

image.png

1.3 discard

语法:discard

功能:清除所有先前在一个事务中放入队列的命令,并且结束事务。

如果使用了WATCH命令,那么DISCARD命令就会将当前连接监控的所有键取消监控。

返回值:清除成功,返回OK。

image.png

1.4 watch

语法:watch key [key …]

功能:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的。如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。

返回值:监控成功,返回OK。

image.png

1.5 unwatch

语法:unwatch

功能:清除所有先前为一个事务监控的键。

  如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。

返回值:清除成功,返回OK。

image.png

3)Redis事务小结:

1、单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键。

2、不保证事务的原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。

今天的知识相对来说是比较重要的,要好好掌握哦,明天讲一下Redis消息的发布与订阅(了解即可),拜拜喽!!!