大厂五剑客之redis基础分布式缓存彻底解决方案---02基础知识归整---二周目

15 篇文章 0 订阅

5-1关系型数据库事务 

 事务是一系列的数据读写操作。

 1、 简介:讲解事务概要和事务隔离级别
       一、一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:

       1、为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
       2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
       二、事务的ACID四大特性
       原子性(Atomicity):·事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行[3]。
       一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束[3]。

       https://blog.csdn.net/qq_26295547/article/details/79828966
       隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行[3]。
       持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中[3]。
      3、事务隔离机制: set global transaction isolation level read uncommitted;
         read uncommitted、read committed、repeatable read、serializable;

         这些隔离机制可以在数据库上直接操作的,看小D的视频。

 5-2mysql事务隔离机制和MVCC(9分钟开始)

 2、浅谈mysql事务隔离机制和MVCC(多版本的并发控制技术)

       1、 redis事务隔离机制可重复读讲解(repeatable read)
       2、 InnoDB MVCC多版本并发控制功能讲解,

图解MVCC:  InnoDB存储数据时候不仅存储了一行数据。

 事务ID ,undo日志回滚日志 ,删除标示

1.DATA_TRX_ID:记录transaction id,每处理一个事务id+1。

2.DATA_ROLL_PTR:存储undo log(回滚日志)的地址,undo log用来记录事务执行的命令的记录。

3.DELETE_BIT:标识这一条记录在事务里是否被删除,不是真正的删除是事务commit才删除的。
        另外,在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号(可能为空,其实还有一列称为回滚指针,用于事务回滚,不在本文范畴。
       这里的版本号并不是实际的时间值,而是系统版本号。每开始新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,
       用来和查询每行记录的版本号进行比较。

列的举例:事务的id,undolog日志,删除的标记,创建版本号,删除的版本号。
5-3redis的事务机制。
       1、 MULTI 与 EXEC命令

            
            以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令
       2、 DISCARD命令

            DISCARD 命令用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态, 最后返回字符串 OK 给客户端, 说明事务已被取消。

           

          报错 没有事务。
       3、WATCH命令

          首先监控msg  开启事务  set和get

         打开另一个终端

          

         返回原来的链接

         

            WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他事务修改了, 那么整个事务不再执行, 直接返回失败。
       4、图解redis执行事务过程原理

       

5-4redis事务和关系型数据库的关系。

       

 1、 原子性(Atomicity)

  1. Redis的原子性有两点:

    • 单个操作是原子性的

    • 多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来,原子操作的意思就是要么成功执行要么失败完全不执行。用现实中的转账比喻最形象,你转账要么成功,要么失败钱不动,不存在你钱转出去了,但收款方没收到这种成功一半失败一半的情况

     
       2、 一致性(Consistency)

           入队错误
                在命令入队的过程中,如果客户端向服务器发送了错误的命令,比如命令的参数数量不对,等等, 那么服务器将向客户端返回一个出错信息, 并且将客户端的事务状态设为 REDIS_DIRTY_EXEC 。事务回滚。

            这个错误是命令的错误。

            执行错误(已经入队了但是没有执行)
                如果命令在事务执行的过程中发生错误,比如说,对一个不同类型的 key 执行了错误的操作, 那么 Redis 只会将错误包含在事务的结果中, 这不会引起事务中断或整个失败,不会影响已执行事务命令的结果,也不会影响后面要执行的事务命令, 所以它对事务的一致性也没有影响。


       3、隔离性(Isolation)

            WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。


       4、持久性(Durability)无法保证。

            因为事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能,所以事务的持久性由 Redis 所使用的持久化模式决定

            redis的持久化的模式包括:rdb(数据内存备份),aof(增量备份),有时延每隔一秒做一次备份。

            rdb:内存是某一个时刻对内存备份不是一直实时在做的。

            aof:会有时延的。

不保证持久性,命令是错的会回滚,执行错误不会回滚。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值