美文网首页技术干货
redis设计与实现-数据库

redis设计与实现-数据库

作者: 求索 | 来源:发表于2020-03-04 00:39 被阅读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键过期有三种策略

  • 定时策略: 在设置key时创建定时器,以CPU牺牲来保障内存高可用
  • 惰性策略:访问键值时判断是否过期,过期则删除,以牺牲内存来保障CPU高可用
  • 定期策略:服务器整体定时器,该策略是前两种的折中

rdb

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

aof

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

内存淘汰机制

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

  • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

SAVE、BGSAVE、BGREWRITEAOF

  • SAVE、BGSAVE存在冲突,任意一个执行,另外一个命令请求会被直接禁止
  • BGREWRITEAOF和BGSAVE 为保证性能问题,禁止同时执行
  • SAVE 堵塞线程的然后执行持久化
  • BGSAVE 创建子线程持久化

自动间隔保存

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当前的数据重新写入。

相关文章

  • 《redis设计与实现》 读书笔记

    《redis设计与实现》 读书笔记 《redis设计与实现》 作者:黄健宏 一、前言 什么是redis:Redis...

  • Redis 五大类型的对象

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis数据库实现

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • RDB持久化

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • AOF持久化

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis底层数据结构

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis事件

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis客户端

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis 服务器

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

  • Redis | 第5章 Redis 中的持久化技术《Redis设

    前言 参考资料:《Redis设计与实现 第二版》; 第二部分为单机数据库的实现,主要由以下模块组成:数据库、持久化...

网友评论

    本文标题:redis设计与实现-数据库

    本文链接:https://www.haomeiwen.com/subject/icqdlhtx.html