• Redis数据库的事物机制(详细讲解)


    一、实验目的

    了解Redis数据库的事物机制

    二、Redis事物机制

    2.1什么是事务

    事务是指一系列操作数据库的步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。

    2.2Redis的事务

    Redis中的事务也是一组命令的集合,至少是两个或两个以上的命令。Redis事务是一个单独的隔离操作,事务中的所有命令都会序列会、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

    Redis事务的主要作用是串联多个命令,防止别的命令插队。

    三、Redis事务相关命令

    Multi:开启事务
    语法:multi
    作用:标记一个事务的开始。事务内的多条命令会按照先后顺序,被放进一个队列当中。
    返回值:总是返回ok

    exec:提交事务
    语法:exec
    作用:执行所有事务块内

    Discard:取消事务
    语法:discard 作用:取消事务,放弃执行事务块内的所有命令
    返回值:总是返回 ok

    watch
    语法:watch key [key …]
    作用:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命
    令所改动, 那么事务将被打断。
    返回值:总是返回ok

    unwatch
    语法:unwatch
    作用:取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了 。
    返回值:总是返回 ok

    请添加图片描述

    四、事务的实现

    4.1正常执行事务

    步骤:开启事务+向事务队列中加入命令+执行事务提交
    请添加图片描述

    4.2第一种事务故障:执行exec命令之前,入队命令错误

    事务执行 exec 之前,入队命令错误(语法错误;严重错误导致服务器不能正常工作),则放弃事务。请添加图片描述

    结论:事务执行 exec 之前,组队中某个命令出现了报告错误,执行时事务终止,整个的所有队列都会被取消。
    请添加图片描述

    4.3第二种事务故障:执行exec命令之后,队列命令执行错误

    请添加图片描述

    结论:在 exec 执行后的所产生的错误, 即使事务中有某个/某些命令在执行时产生了错误,事务中的其他命令仍然会继续执行。Redis 在事务失败时不进行回滚,而是继续执行余下的命令请添加图片描述

    4.4正常放弃事务

    请添加图片描述

    五、Redis的watch机制

    5.1 事务冲突

    悲观锁,就是很悲观,每次去拿数据的时候都认为别人会修改,所以== 每次在拿数据的时候都会上锁 ==,这样别人想拿这个数据就会等待,直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

    乐观锁,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis 就是利用这种 check-and-set机制实现事务的。

    5.2 Redis的WATCH机制

    WATCH 机制:使用 WATCH 监视一个或多个 key,跟踪 key 的 value 修改情况,如果有 key 的 value 值在事务 EXEC 执行之前被修改了,则整个事务就被取消。EXEC 返回提示信息,表示事务已经失败。

    事务只有在被 WATCH 的 key 没有修改的前提下才能执行。不满足条件,事务被取消。使用 WATCH 监视了一个带过期时间的键,那么即使这个键过期了,事务仍然可以正常执行。

    何时取消 key 的监视(WATCH)?
    ①WATCH 命令可以被调用多次。对键的监视从 WATCH执行之后开始生效,直到调用 EXEC 为止。不管事务是否成功执行,对所有键的监视都会被取消。
    ②当客户端断开连接时,该客户端对键的监视也会被取消。
    ③UNWATCH 命令可以手动取消对所有键的监视请添加图片描述

  • 相关阅读:
    米哈游、复旦发布,具备感知、大脑、行动的大语言模型“智能体”
    论信息系统项目的整体管理
    【无标题】
    (八)K8S数据持久化存储
    java8新特性
    C# winform入门测试项目,readonly只读修饰符入门必知基础测试,不可访问,因为具有一定的保护级别
    QT学习管理系统
    腾讯云数据库公有云市场稳居TOP 2!
    Linux 下 使用 Ekho 进行TTS文本转语音
    《算法竞赛进阶指南》数独
  • 原文地址:https://blog.csdn.net/weixin_51293984/article/details/126888314