Redis中的事务管理

在之前的文章中我们已经介绍了很多关于Redis中的命令,虽然命令的执行是原子性的,但是如果多条命令组合在一起则Redis就不能保证组合命令的原子性了。并且如果我们接触关系型数据库,那么我们一定会知道,在关系型数据库中提供了事务管理的功能,通过事务我们可以保证一组动作,要么全部成功,要么全部失败。在Redis中也提供了类似的功能,但Redis中的事务管理和关系型数据库中事务管理还是有区别的。下面我们详细介绍一下Redis中的事务管理。

在Redis中我们可以通过multi和exec两个命令来实现简单的事务管理。multi命令代表事务的开始,exec命令代表事务的结束,在使用时这两个命令之间执行的命令都是原子性的。

下面我们看具体的使用。

我们看上图所示知道在使用Redis事务管理时,我们在multi和exec两个命令之间执行成功的命令,返回的结果是QUEUED的。这代表着命令并没有真正的执行,而暂时保存到Redis中。如果此时我们使用另一个客户端获取上图中key时,则返回的结果一定是0,因为命令并没有执行成功,也就是事务并没有提交。

只有当执行exec命令时,Redis中的事务才会提交。提交后我们在客户端执行刚刚的命令,则会获取到事务中执行成功的数据。

如果我们想要停止事务,则可以使用discard命令。

下面我们介绍一下在使用Redis事务时的注意事项。

  • 命令错误:如果我们在使用事务时,如果执行命令有错误,则会造成事务无法提交。
  • 运行时错误:如果我们在事务中执行的命令本身没有语法错误时,例如将sadd命令写成了zadd命令,这种就是运行时错误了。这种错误Redis会成功的将事务提交,所以遇到这种错误时,需要开发人员自行处理了。

在某些业务中,为了确保事务中的key没有被其它客户端修改过,才提交事务,否则不执行类似乐观锁一样。在Redis中我们可以watch命令来解决这类问题。下面我们看一下具体操作。

客户端一:

客户端二:

这就是Redis中事务管理的功能,它和传统的关系型数据库中的事务相比,Redis中事务管理要简单的多,因为关系型数据库中的事务支持很多复杂的逻辑计算,并且支持回滚功能。而Redis中事务管理不支持上述功能。这也是它们之间的主要区别。

本文分享自微信公众号 - 吉林乌拉(jilinwulacom)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小麦苗的DB宝专栏

修复由于主库NOLOGGING操作引起的备库ORA-01578和ORA-26040错误

修复由于主库NOLOGGING操作引起的备库ORA-01578和ORA-26040错误

9320
来自专栏小麦苗的DB宝专栏

【OCP最新题库解析(052)--题60】Which three are true about UNDO data?

注:OCP-052最新题库完整详细解答版请联系小麦苗私聊。解题不易,请大家尊重原创。

9620
来自专栏小麦苗的DB宝专栏

【DB笔试面试398】Oracle数据库中,以下哪个命令可以删除整个表中的数据,并且无法回滚()

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

49120
来自专栏小麦苗的DB宝专栏

【DB笔试面试411】​设U1是db_datawriter角色中的成员,则U1从该角色中有_____、_____、_____。

在SQL Server 2000中,设U1用户在某数据库中是db_datawriter角色中的成员,则用户U1从该角色中可以获得的数据操作权限有_____、__...

8610
来自专栏小麦苗的DB宝专栏

【DB笔试面试397】在Oracle中,以下工具可以实现逻辑备份数据库对象或整个数据库的是哪一项()

逻辑备份是指使用工具exp或expdp将数据库对象的结构和数据导出到二进制文件的过程。当数据库对象被误操作而损坏后就可以使用工具imp或impdp利用备份的文件...

9120
来自专栏小麦苗的DB宝专栏

【DB笔试面试399】现需要查询参加了课程ID为C10的考试,并且分数排在前10名的学生,以下哪项语句能够实现此功能()

现需要查询参加了课程ID为C10的考试,并且分数排在前10名的学生,以下哪项语句能够实现此功能()

12810
来自专栏小麦苗的DB宝专栏

【DB笔试面试410】SQL Server 2000对数据库提供的备份有:_____、_____、_____。

在SQL Server 2000中,Master是一个非常重要的系统数据库,如果Master损坏,那么将会对系统造成严重后果,因此系统管理员应该对Master进...

5620
来自专栏小麦苗的DB宝专栏

【DB笔试面试401】​在非归档方式下操作的数据库禁用了()

Oracle数据库可以设置为归档模式或非归档模式。当数据库运行在归档模式下时,数据库会将所有的事务记录在联机日志(Online Redo Log)中。当联机日志...

8420
来自专栏小麦苗的DB宝专栏

【DB笔试面试403】​下面哪个操作不会启动触发器()

触发器(TRIGGER)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是由手工启动,...

4910
来自专栏小麦苗的DB宝专栏

【DB笔试面试395】SQL Server的两种存储结构是什么?

(1)页:用于数据存储的连续的磁盘空间块,SQL Server中数据存储的基本单位是页,磁盘I/O操作在页级执行,页的大小为8KB,每页的开头是96字节的页头,...

9820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励