Redis 设计 --- 持久化存储策略 以及 过期键删除策略

写在前面

上一篇 介绍了 Redis 设计中存在的几种重要的数据结构

本篇主要介绍 Redis 中 过期键删除策略 以及 如何“友好”支持数据持久化存储

过期键删除策略

过期键删除策略 主流的有三种:定时删除 惰性删除 定期删除,redis 采用 惰性删除 与 定期删除两个策略

惰性删除
a.png

RDB 与 AOF

Redis 对于数据持久化的支持是比较出名的,分为 RDB 和 AOF 两种

RDB

RDB 支持两种运行方式,一种是阻塞式,另外一种是非阻塞式。

非阻塞式

当创建 RDB 文件时,服务会 fork 一个子进程出来,在后台默默运行,不影响父进程继续服务

小知识

操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置

AOF

AOF文件会保存服务器运行期间所执行的每一条有效的操作指令,以命令追加的形式,保存在持久化文件中,但是随着执行的指令越来越多,AOF 文件的体积将变的越来越可观,于是衍生出了“AOF重写”

AOF 重写

当触发 AOF 重写场景时,服务会 fork 一个子进程出来,在后台默默运行,不影响父进程继续服务;这里与 RDB 原理不同的一点时,在 AOF 重写期间,父进程执行的指令依然会被追加到 AOF 重写文件中

b.png
RDB 与 AOF 对比

AOF

RDB

频率

每秒同步

900s内至少一次修改/300s内至少10次修改/60s内至少10000次修改

原理

命令追加,客户端运行的指令都会持久化在文件中

保存某个事件点的数据快照

事务的 ACID 性质

原子性、一致性、隔离性、持久性

原子性

事务中的多个事务,要么全部执行,要么一个也不执行。Redis 不支持事务回滚,但是,即使执行了错误的指令,也不会影响已经执行了的指令,而且会按照命令队列继续执行下去,以此保证其原子性。

一致性

数据符合数据库本身的定义和要求,没有包含非法或无效的错误数据。Redis 通过严谨的错误检查(包括但不限于 入队检查 执行前检查)以及简单的设计(无视队列中的无效指令)来保证其一致性。

隔离性

即使有多个事务并发执行,各个事务之间也不会相互影响,无论并行进行还是串行进行,最终的结果将是相同的。Redis 以其单线程的设计,来保证其天然的隔离性。

小知识

数据库隔离级别分为四种: 未提交读、提交读、可重复读、串行读;可能存在的异常场景: 脏读、不可重复读、幻读

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏冰霜之地

初探 Go 的编译命令执行过程

Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go 语言最最吸...

1463
来自专栏我爱编程

Day1爬虫原理

爬虫基本流程 发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。 获取响应内容 如果...

3256
来自专栏温安适的blog

redis中的lua

5946
来自专栏阿炬.NET

Wojilu学习笔记 (02)

2895
来自专栏木头编程 - moTzxx

Redis 的安装与拓展操作指导(Windows+Linux)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1542
来自专栏IT可乐

Redis详解(八)------ 主从复制

  前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务...

930
来自专栏菩提树下的杨过

温故而知新:Asp.Net中如何正确使用Session

Asp.Net中的Session要比Asp中的Session灵活和强大很多,同时也复杂很多;看到有一些Asp.Net开发人员报怨说Session不稳定,莫名其妙...

20910
来自专栏GreenLeaves

C# 多线程学习系列二

前台线程:前台线程一般执行重要性很高的任务,至于什么是重要性很高,这个需要结合业务综合考虑,哪些操作是当前应用程序必须执行的.

722
来自专栏白驹过隙

Redis - Keepalived + redis 主备热备切换

49211
来自专栏FreeBuf

基于Session的身份窃取

一、Session是什么 密码与证书等认证手段,一般用于登录过程。用户登录之后,服务器通常会建立一个新的Session保存用户的状态和相关信息,用以跟踪用户的状...

3238

扫码关注云+社区

领取腾讯云代金券