目录

前言

一、redis事务

二、通过redis-cli体验redis事务相关命令

1.开启事务

2.放弃事务

3.redis事务中的命令正确而数据类型错误、命令错误时的执行情况

(1)、第一种情况-Redis 事务遇到的命令正确而数据类型不符合

(2)、第二种情况-Redis 命令有错,事务中所有的命令都不会执行

三、总结


前言

今天记录一下对redis事务的探索过程,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

首先说下,redis中的没有事务回滚的感谢评论中两位大佬的点评。关于事务的更详细介绍请看评论中这位大佬的文章 :Redis WATCH事务监视机制与回滚_MSSPLANET的博客-CSDN博客

标题中提到回滚机制其实就是redis事务中的命令正确而数据类型错误 和 命令错误时的执行情况。

一、redis事务

在Redis中开启事务使用multi命令,执行事务使用exec命令。multi到exec命令之间的所有Redis命令将采取进入队列的形式,直至exec命令的出现,才会一次性发送队列里的命令去执行,而在执行这些命令的时候中间不会被其他Redis命令所打断,这就是Redis的事务机制。

二、通过redis-cli体验redis事务相关命令

1.开启事务

如上图,先使用multi启动了Redis的事务,然后执行set和get命令,我们可以发现它并未马上执行,而是返回了一个“QUEUED”的结果。这说明Redis将其放入队列中,并不会马上执行,当命令执行到exec的时候它就会把队列中的命令发送给Redis服务器,这样存储在队列中的命令就会被执行了,所以才会有“OK”和“a”“b”的输出返回。

2.放弃事务

如果想放弃事务中命令的执行,可以使用discard命令,它可以取消事务中命令的执行。

如上图当我们使用了discard命令后,再使用exec命令时就会报错,因为discard命令已经取消了事务中的命令,而到了exec命令时,队列里面已经没有命令可以执行了,所以就出现了报错的情况。

3.redis事务中的命令正确而数据类型错误、命令错误时的执行情况

(1)、第一种情况-Redis 事务遇到的命令正确而数据类型不符合

从上图,我们将key1设置为字符串,使用命令incr对其自增,exec命令执行后,当遇到incr时发生命令操作的数据类型错误,所以显示出了错误,而其之前和之后的命令都会被正常执行,类似于java中的运行时异常,程序可以执行但是会报错。

(2)、第二种情况-Redis 命令有错,事务中所有的命令都不会执行

如上,当执行命令格式错误时,3个key都没有设置上值,说明之前和之后的所有命令都没有执行成功,类似于jave中的编译异常,编译都不通过,肯定程序没法执行。

三、总结

  1. redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
  2. redis事务遇到的命令正确而数据类型不符合时,其之前和之后的命令都会被正常执行。
  3. redis事务遇到的命令错误,无论之前和之后的命令都不会执行。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐