【Redis系列6】Redis事务ACID特性和内存回收及RDB和AOF持久化原理分析(2)

    • A-原子性
    • Redis中的事务为什么不会滚
  • C-一致性

  • I-隔离性

  • D-持久性

  • WATCH命令

    • watch命令的作用
  • watch原理分析

  • 内存回收

    • 过期策略
  • 淘汰策略

  • LRU算法

    • Redis改进后的LRU算法
  • Redis如何管理热度数据

  • LFU算法

    • 访问频次递增
  • 访问频次递减

  • Redis持久化机制

    • RDB机制
    • RDB机制触发条件
    • 自动触发
  • 手动触发

  • RDB机制相关配置文件

  • RDB机制优点

  • RDB机制缺点

  • AOF机制

    • AOF机制如何开启
  • AOF机制数据是否实时写入磁盘

  • AOF重写

    • 重写原理分析
  • AOF机制触发条件

  • AOF机制机制优点

  • AOF机制机制缺点

  • 总结

前言

===============================================================

经过前面相关文章的介绍,我们已经了解了Redis当中数据类型的底层存储结构,对于Redis也可以算是有了基本的认识,那么从这一篇开始,后面的文章会相继介绍Redis当中的一些高级特性,比如事务,持久化,发布/订阅/事件等等,本文主要会介绍以下两大特性:

1、Redis当中的事务及其ACID特性

2、Redis的两种持久化机制:RDB和AOF

事务

===============================================================

提到事务,我想大多数人的第一感觉就是这是关系型数据库的特性,NoSQL数据库一般都不具有事务,那么Redis作为一款NoSQL数据库有事务吗?

Redis居然有事务?


答案是肯定的。Redis当中的单个命令都是原子操作,但是如果我们需要把多个命令组合操作的时候就需要用到事务。

Redis当中,通过下面4个命令来实现事务:

  • 1、multi:开启事务

  • 2、exec:执行事务

  • 3、discard:取消事务

  • 4、watch:监视

下图就是一个完整的事务执行流程:

在这里插入图片描述

从上图中,我们可以总结出Redis的事务主要分为以下3步:

  • 1、执行命令multi开启一个事务

  • 2、开启事务之后执行的命令都会被放入一个队列,并且固定返回"QUEUED"

  • 3、执行命令exec提交事务之后,会依次执行队列里面的命令,并依次返回所有命令结果(如果想要放弃事务,可以执行discard命令)。

Redis事务实现原理


Redis中每个客户端都有自己的事务状态multiState,下面就是一个客户端client的数据结构定义:

typedef struct client {

uint64_t id;//客户端唯一id

multiState mstate; //MULTI和EXEC状态(即事务状态)

//…省略其他属性

} client;

multiState数据结构定义如下:

typedef struct multiState {

multiCmd *commands;//存储命令的FIFO队列

int count;//命令总数

//…省略了其他属性

} multiState;

multiCmd是一个队列用来接收并存储开启事务之后发送的命令,其数据结构定义如下:

typedef struct multiCmd {

robj **argv;//用来存储参数的数组

int argc;//参数的数量

struct redisCommand *cmd;//命令指针

} multiCmd;

我们以上面事务的示例截图中事务为例,可以得到如下所示的一个简图:

在这里插入图片描述

Redis事务ACID特性


传统的关系型数据库中,一个事务一般都具有ACID特性,想要详细了解事务特性的可以点击这里。那么现在就让我们来分析一下Redis是否也满足这ACID四大特性。

A-原子性

在讨论原子性之前,我们先来看2个例子:

例子一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值