Redis 学习笔记(二)

文章目录

  • [1 持久化](#1 持久化)
    • [1.1 RDB](#1.1 RDB)
      • [1.1.1 RDB 的 bgsave 执行流程](#1.1.1 RDB 的 bgsave 执行流程)
    • [1.2 RDB 文件简单介绍](#1.2 RDB 文件简单介绍)
    • [1.3 AOF](#1.3 AOF)
  • [2 文章末尾定位](#2 文章末尾定位)

1 持久化

Redis 是一个内存数据库 ,他的数据既存储在内存 中,又存储在硬盘 里。同一份数据存了两份。这两份数据可能存在短暂的不一致 ,这取决于配置的持久化策略 。Redis 查询某个数据时,是直接从内存中查询的。当 Redis 重启时会将硬盘中的数据加载到内存中

Redis 的持久化策略具体是:

  1. RDB(Redis Database):在特定时间间隔或者满足特定条件时,生成内存数据的快照到硬盘中
  2. AOF (Append Only File):记录每个写操作,按照配置的同步策略将修改同步到硬盘中

1.1 RDB

RDB(Redis Databases):在特定时间间隔或者满足特定条件时,生成快照到硬盘中。

具体来说包含以下两种方式:

  1. 手动生成快照

    • save 在前台生成快照,会阻塞 Redis 服务器
    • bgsave 在后台生成快照
  2. 自动生成快照:

    • 在 Redis 的配置文件中设置一下,让 Redis 每隔多长时间 / 每产生多少次修改就触发

1.1.1 RDB 的 bgsave 执行流程

bgsave 是在后台生成快照,这是怎么做到的?难道引入了多线程?

答:Redis 使用多进程而非多线程来实现 bgsave。当执行 bgsave 时,Redis 首先检查是否有后台保存正在进行,如果没有则通过 fork() 系统调用创建子进程。
关键点fork() 使用 写时复制(Copy-On-Write) 技术,子进程与父进程共享相同的内存页,只有在数据被修改时才复制相应的内存页。这使得 fork() 操作非常快速且内存高效。

子进程基于 fork() 时刻的内存快照生成 RDB 文件,而父进程继续处理客户端请求,实现了真正的后台保存。

1.2 RDB 文件简单介绍

默认的 RDB 文件位置: /var/lib/redis (可以在配置文件中进行修改)

默认的 RDB 文件名: dump.rdb (可以在配置文件中进行修改)

dump.rdb 中存储的是内存中的数据,其中的内容是二进制的,并且默认情况下会进行压缩。

dump.rdb 文件始终是只有一个的,当已经运行过一次 bgsave 后,再次运行 bgsave,Redis 会生成一个新的临时文件来进行备份,等到备份完成时会将 dump.rdb 文件 替换为刚刚的临时文件。

dump.rdb 中的内容:

1.3 AOF

2 文章末尾定位

相关推荐
白露与泡影1 天前
Redis:我是如何与客户端进行通信的
数据库·redis·缓存
纵有疾風起1 天前
C++—string(1):string类的学习与使用
开发语言·c++·经验分享·学习·开源·1024程序员节
yue0081 天前
C#理论学习-WinForm实践开发教程总结
开发语言·学习·c#
Mr.Jessy1 天前
Web APIs学习第一天:获取 DOM 对象
开发语言·前端·javascript·学习·html
CodeLongBear1 天前
Day02计算机网络网络层学习总结:从协议到路由全解析
学习·计算机网络·dubbo
我先去打把游戏先1 天前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
小生凡一1 天前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe10191 天前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
web前端神器1 天前
vitest单元测试笔记
笔记
朝新_1 天前
【SpringMVC】SpringMVC 小案例:加法计算器初步理解前后端接口交互与数据处理
java·笔记·spring·交互·javaee