上一篇 介绍了 Redis 设计中存在的几种重要的数据结构
本篇主要介绍 Redis 中 过期键删除策略 以及 如何“友好”支持数据持久化存储
过期键删除策略 主流的有三种:定时删除 惰性删除 定期删除,redis 采用 惰性删除 与 定期删除两个策略
Redis 对于数据持久化的支持是比较出名的,分为 RDB 和 AOF 两种
RDB 支持两种运行方式,一种是阻塞式,另外一种是非阻塞式。
非阻塞式
当创建 RDB 文件时,服务会 fork 一个子进程出来,在后台默默运行,不影响父进程继续服务
小知识
操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置
AOF文件会保存服务器运行期间所执行的每一条有效的操作指令,以命令追加的形式,保存在持久化文件中,但是随着执行的指令越来越多,AOF 文件的体积将变的越来越可观,于是衍生出了“AOF重写”
AOF 重写
当触发 AOF 重写场景时,服务会 fork 一个子进程出来,在后台默默运行,不影响父进程继续服务;这里与 RDB 原理不同的一点时,在 AOF 重写期间,父进程执行的指令依然会被追加到 AOF 重写文件中
AOF | RDB | |
---|---|---|
频率 | 每秒同步 | 900s内至少一次修改/300s内至少10次修改/60s内至少10000次修改 |
原理 | 命令追加,客户端运行的指令都会持久化在文件中 | 保存某个事件点的数据快照 |
原子性、一致性、隔离性、持久性
事务中的多个事务,要么全部执行,要么一个也不执行。Redis 不支持事务回滚,但是,即使执行了错误的指令,也不会影响已经执行了的指令,而且会按照命令队列继续执行下去,以此保证其原子性。
数据符合数据库本身的定义和要求,没有包含非法或无效的错误数据。Redis 通过严谨的错误检查(包括但不限于 入队检查 执行前检查)以及简单的设计(无视队列中的无效指令)来保证其一致性。
即使有多个事务并发执行,各个事务之间也不会相互影响,无论并行进行还是串行进行,最终的结果将是相同的。Redis 以其单线程的设计,来保证其天然的隔离性。
小知识
数据库隔离级别分为四种: 未提交读、提交读、可重复读、串行读;可能存在的异常场景: 脏读、不可重复读、幻读
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。