技术干货

redis设计与实现-数据库

2020-03-04  本文已影响0人  求索

概念介绍

RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。

AOF(Append Only File)持久化: AOF持久化是通过保存Redis所执行的写命令来记录数据库状态的。

数据结构

redis数据库的结构如下

struct redisServer {
    // ...
    //
    一个数组,保存着服务器中的所有数据库
    redisDb *db;
    // ...
}

多个数据库之间可以使用select切换,使用时需要注意数据库选择的正确性

键空间

Redis是一个键值对(key-value pair)数据库服务器,其中,redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典称为键空间(key space):

typedef struct redisDb {
    // ...
    //
    数据库键空间,保存着数据库中的所有键值对
    dict *dict;
    // ...
} redisDb;

过期时间

redis键过期有三种策略

rdb

开启rdb的主服务器只加载未过期键,从服务器加载所有键值

aof

在在文件写入`删除、重写时各不相同

内存淘汰机制

在内存耗尽了会走内存淘汰机制。redis 内存淘汰机制有以下几个:

SAVE、BGSAVE、BGREWRITEAOF

自动间隔保存

redis 后台配置

save 90 1
save 1000 60

第一条配置表示 1秒钟内如果发生90次键值变化,那么自动调用BGSAVE持久化数据。
第二条配置表示 60秒钟内如果发生1000次键值变化,那么自动调用BGSAVE持久化数据

计数器

dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后,服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括写入、删除、更新等操作)。

lastsave属性是一个UNIX时间戳,记录了服务器上一次成功执行SAVE命令或者BGSAVE命令的时间。

数据加载流程

redis加载流程.png

持久化

redis两种持久化方式,rdb、aof。

rdb支持自动定期保存,使用save配置可实现。

aof支持可重新操作,可重写是指redis命令太多时,记录命令操作历史太过于浪费空间。通过把redis当前的数据重新写入。

上一篇 下一篇

猜你喜欢

热点阅读