Molet

面试竟被问到Redis事务,触及知识盲区,脸都绿了

Molet 运维技术 2022-11-20 425浏览 0

前言

前几天有读者说自己面试被问到Redis的事务,虽然不常用,但是面试竟然被问到,平时自己没有注意Redis的事务这一块,面试的时候被问到非常不好受。

虽然,这位读者面试最后算是过了,但是薪资方面没有拿到自己理想的薪资。

其实这个也是正常的,一般面试被问到烂大街的,谁还问你啊,专门挑一些不常见的来问你,就是为了压你的薪资。

所以在这里写一篇文章对Redis的事务进行详细的讲解,估计对Redis事务从理解到原理深入这一篇就够了。

以后面试都不用担心了再被问道Redis的事务了,这一篇主要讲解Redis事务原理和实操的演练,理解理论的同时也通过实操来证实理论。

事务介绍

Redis事务是一组命令的集合,将多个命令进行打包,然后这些命令会被顺序的添加到队列中,并且按顺序的执行这些命令。

「Redis事务中没有像Mysql关系型数据库事务隔离级别的概念,不能保证原子性操作,也没有像Mysql那样执行事务失败会进行回滚操作」。

这个与Redis的特点:「快速、高效」有着密切的关联,「因为一些列回滚操作、像事务隔离级别那这样加锁、解锁,是非常消耗性能的」。所以,Redis中执行事务的流程只需要简单的下面三个步骤:

  1. 开始事务(MULTI)
  2. 命令入队
  3. 执行事务(EXEC)、撤销事务(DISCARD )

    在Redis中事务的实现主要是通过如下的命令实现的:

    命令 功能描述
    MULTI 「事务开始的命令」,执行该命令后,后面执行的对Redis数据类型的「操作命令都会顺序的放进队列中」,等待执行EXEC命令后队列中的命令才会被执行
    DISCARD 「放弃执行队列中的命令」,你可以理解为Mysql的回滚操作,「并且将当前的状态从事务状态改为非事务状态」
    EXEC 执行该命令后「表示顺序执行队列中的命令」,执行完后并将结果显示在客户端,「将当前状态从事务状态改为非事务状态」。若是执行该命令之前有key被执行WATCH命令并且又被其它客户端修改,那么就会放弃执行队列中的所有命令,在客户端显示报错信息,若是没有修改就会执行队列中的所有命令。
    WATCH key 表示指定监视某个key,「该命令只能在MULTI命令之前执行」,如果监视的key被其他客户端修改,「EXEC将会放弃执行队列中的所有命令」
    UNWATCH 「取消监视之前通过WATCH 命令监视的key」,通过执行EXEC 、DISCARD 两个命令之前监视的key也会被取消监视

继续浏览有关 Redis 的文章
发表评论