Redis的数据持久化

redis的数据持久化 ​ 写入速度快 ------------AOF ​ 写入速度慢 ------------RDB。##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间。1、此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能,只有在“yes”下,aof重写/文件同步等特性才会生效。4、在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no” 阅读详情

目录

一、数据持久化

1.1 RDB

1.1.1 如何备份

1.1.2 FORK

1.1.3 备份与恢复

1.2 AOF

1.2.1 持久化流程

1.3 选择RDB/AOF

Ok, so what should I use?

二、试题演示

2.1.1 现象

2.1.2 原因

2.1.3 解决

2.2 缓存击穿

2.2.1 现象

2.2.2 原因

2.2.3 解决

2.3 缓存雪崩

2.3.1 现象

2.3.2 原因

2.3.3 解决


一、数据持久化

官网文档地址:https://redis.io/docs/management/persistence/

Redis提供了主要提供了 2 种不同形式的持久化方式:

  • RDB(Redis数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。

  • AOF(Append Only File):AOF 持久化记录服务器接收到的每个写操作,在服务器启动时再次播放,重建原始数据集。 命令使用与 Redis 协议本身相同的格式以仅附加方式记录。 当日志变得太大时,Redis 能够在后台重写日志。

1.1 RDB

        在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。

1.1.1 如何备份

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束后,再用这个临时文件替换上次持久化好的文件。主进程不进行任何的IO操作,这样就保证了较高的性能。如果需要进行大规模数据的恢复,并且对于数据恢复的不完整性非常敏感,那么RDB方式会比AOF方式更加高效。注意点:最后一次持久化后的数据可能丢失。

1.1.2 FORK

Fork的作用是复制一个与当前进程一样的进程,且新进程内的所有数据(变量,环境变量,程序计数器等等)数值都和原进程一直,但它是一个全新的进程,并且作为原进程的子进程。

在 Linux 程序中,fork() 会产生一个和父进程完全相同的子进程,但子进程在此后多会 exec 系统调用,出于效率考虑,Linux 中引入了“写时复制技术”。

一般情况下,父进程和子进程会共用一段物理内存,只有进程空间的各段内容发生变化时,才会将父进程的内容复制一份给子进程。

1.1.3 备份与恢复

#dump.rdb存放在两个位置上
1、root\          目录    =====>通过正常的启动和关闭所保存的地址
2、var\lib\redis\ 目录    =====>通过 systemctl restart redis 命令所生成的
我们如果要进行备份还原的实验的话,确定目标地址,并选择适配的命令去观察变化
#步骤1:清空数据库
FLUSHALL
#步骤2:
客户端退出  exit
服务器关闭  ctrl+c
#步骤3:观察root\ 内的dump.rdb文件大小 发现是 92
#步骤4:正常启动redis并登录客户端
服务器启动  redis-server
客户端登录  redis-cli
#步骤5:保存了六组信息
set k1 v1 
.......
set k6 v6
#步骤7:
客户端退出  exit
服务器关闭  ctrl+c
#步骤8:观察root\ 内的dump.rdb文件大小 发现是 139
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#步骤9 将139大小的dump.rdb复制 命名为 dump.rdb.back
cp dump.rdb dump.rdb.back
#步骤10 删除dump.rdb
rm -f dump.rdb
#步骤11:正常启动redis并登录客户端,查看数据
服务器启动  redis-server
客户端登录  redis-cli
客户端查看  keys *   ======================>  数据没有了
#步骤12
客户端退出  exit
服务器关闭  ctrl+c
#步骤13:观察root\ 内的dump.rdb文件大小 发现是 92
#步骤14:将139大小的dump.rdb.back复制 命名为 dump.rdb
#步骤15:正常启动redis并登录客户端,查看数据
服务器启动  redis-server
客户端登录  redis-cli
客户端查看  keys *   ======================>  数据存在

1.2 AOF

        以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据。简单说,Redis 重启时会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

在Redis的默认配置中AOF(Append Only File)持久化机制是没有开启的,要想使用AOF持久化需要先开启此功能。AOF持久化会将被执行的写命令写到AOF文件末尾,以此来记录数据发生的变化,因此只要Redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集。

1.2.1 持久化流程

1、客户端的请求写命令会被append追加到AOF缓冲器内;

2、AOF缓冲区根据AOF持久化策略,将sync同步到磁盘的AOF文件中;

3、AOF文件大小超过了重写策略或手动重写时,会对AOF文件进行重写,以压缩AOF文件容量;

4、Redis服务重启时,会重新load加载AOF文件中的写操作,已达到数据恢复的目的。

1.2.2 备份与恢复

#步骤1 开启AOF
修改 redis.conf 配置文件:
- 通过修改redis.conf配置中`appendonly yes`来开启AOF持久化
- 通过appendfilename指定日志文件名字(默认为appendonly.aof)
- 通过appendfsync指定日志记录频率
选项同步频率
always每个redis写命令都要同步写入硬盘,严重降低redis速度
everysec每秒执行一次同步显式的将多个写命令同步到磁盘
no由操作系统决定何时同步
#步骤2 重启服务以确保配置文件被重新读过
systemctl restart redis
#步骤3 在var/lib/redis目录内找到了 appendonly.aof
#步骤4:登录客户端并保存数据
客户端登录  redis-cli
#步骤5:保存了六组信息
set k1 v1 
.......
set k6 v6
#步骤6:基于客户端关闭连接和服务
SHUTDOWN
#步骤7:在var/lib/redis目录内找到了 appendonly.aof  (大小由0变成了一组数值)
#步骤8:复制appendonly.aof 
cp appendonly.aof  appendonly.aof.back
#步骤9:重启服务连接客户端
systemctl restart redis
客户端登录  redis-cli
#步骤10:清空数据库并停止服务
FLUSHDB
SHUTDOWN
#步骤11:在var/lib/redis目录内找到了 appendonly.aof  (大小由一组数值变成了另一组数值 后数值>前数值)
#步骤12:复制appendonly.aof.back
cp appendonly.aof.back  appendonly.aof
#步骤13:重启服务连接客户端
systemctl restart redis
客户端登录  redis-cli
#步骤14:检查数据
keys *

1.3 选择RDB/AOF

那么,在开发中是选择 RDB 还是选择 AOF 来持久化呢?

官网建议如下:

Ok, so what should I use?

The general indication you should use both persistence methods is if you want a degree of data safety comparable to what PostgreSQL can provide you.

If you care a lot about your data, but still can live with a few minutes of data loss in case of disasters, you can simply use RDB alone.

There are many users using AOF alone, but we discourage it since to have an RDB snapshot from time to time is a great idea for doing database backups, for faster restarts, and in the event of bugs in the AOF engine.

The following sections will illustrate a few more details about the two persistence models.

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储

  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.

  • Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

  • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.

  • 同时开启两种持久化方式

  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据, 因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?

  • 建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份), 快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

二、试题演示

2.1 缓存穿透

        用户想要查询某个数据,在 Redis 中查询不到,即没有缓存命中,这时就会直接访问数据库进行查询。当请求量超出数据库最大承载量时,就会导致数据库崩溃。这种情况一般发生在非正常 URL 访问,目的不是为了获取数据,而是进行恶意攻击。

2.1.1 现象

1、应用服务器压力变大

2、Redis缓存命中率降低

3、一直查询数据库

2.1.2 原因

一个不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

2.1.3 解决

① 对空值缓存:如果一个查询数据为空(不管数据是否存在),都对该空结果进行缓存,其过期时间会设置非常短。

② 设置可以访问名单:使用bitmaps类型定义一个可以访问名单,名单id作为bitmaps的偏移量,每次访问时与bitmaps中的id进行比较,如果访问id不在bitmaps中,则进行拦截,不允许访问。

③ 采用布隆过滤器:布隆过滤器可以判断元素是否存在集合中,他的优点是空间效率和查询时间都比一般算法快,缺点是有一定的误识别率和删除困难。

④ 进行实时监控:当发现 Redis 缓存命中率急速下降时,迅速排查访问对象和访问数据,将其设置为黑名单。

2.2 缓存击穿

        key中对应数据存在,当key中对应的数据在缓存中过期,此时又有大量请求访问该数据,由于缓存中过期了,请求会直接访问数据库并回设到缓存中,高并发访问数据库会导致数据库崩溃。

2.2.1 现象

1、数据库访问压力瞬时增加

2、Redis中没有出现大量 Key 过期

3、Redis正常运行

4、数据库崩溃

2.2.2 原因

由于 Redis 中某个 Key 过期,而正好有大量访问使用这个 Key,此时缓存无法命中,因此就会直接访问数据层,导致数据库崩溃,最常见的就是非常“热点”的数据访问。

2.2.3 解决

① 预先设置热门数据:在redis高峰访问时期,提前设置热门数据到缓存中,或适当延长缓存中key过期时间。

② 实时调整:实时监控哪些数据热门,实时调整key过期时间。

③ 对于热点key设置永不过期。

2.3 缓存雪崩

        key中对应数据存在,在某一时刻,缓存中大量key过期,而此时大量高并发请求访问,会直接访问后端数据库,导致数据库崩溃。

注意:缓存击穿是指一个key对应缓存数据过期,缓存雪崩是大部分key对应缓存数据过期。

正常情况下:

缓存失效瞬间:

2.3.1 现象

数据库压力变大导致数据库和 Redis 服务崩溃 。

2.3.2 原因

在极短时间内,查询大量 key 的集中过期数据。

2.3.3 解决

① 构建多级缓存机制:nginx缓存 + redis缓存 + 其他缓存。

② 设置过期标志更新缓存:记录缓存数据是否过期,如果过期会触发另外一个线程去在后台更新实时key的缓存。

③ 将缓存可以时间分散:如在原有缓存时间基础上增加一个随机值,这个值可以在1-5分钟随机,这样过期时间重复率就会降低,防止大量key同时过期。

④ 使用锁或队列机制:使用锁或队列保证不会有大量线程一次性对数据库进行读写,从而避免大量并发请求访问数据库,该方法不适用于高并发情况。

一文读懂Redis之数据持久化 Redis提供了三种持久化机制来防止内存数据丢失:RDB快照持久化、AOF日志持久化和混合持久化。RDB通过定期快照保存数据,支持手动(save/bgsave)和自动触发;AOF记录所有写操作命令,通过追加日志文件实现数据恢复,可配置写入策略和文件重写规则;混合持久化结合两者优势,先加载RDB快照再重放增量AOF日志,既保证数据完整性又提升恢复效率。三种机制各有特点,可根据实际需求配置使用。 阅读详情

相关推荐

Windows NPS与华为、华三、思科设备RADIUS认证实战指南

本文详细介绍了Windows NPS与华为、华三、思科设备RADIUS认证的实战配置指南。通过NPS服务器统一管理网络设备认证,实现企业级安全访问控制,涵盖基础配置、设备对接及故障排查方法,助力管理员提升网络安全管理效率。

weixin_29284201的博客 501

Redis持久化

redis

islunatic的博客 8679

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3023

Redis的持久化详解

Redis的持久化,Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。RDB(Redis DataBase):简而言之,就是在指定的时间间隔内,定时的将 redis 存储的数据生成Snapshot快照并存储到磁盘等介质上;AOF(Append Of File):将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

怪咖@的博客 3万+

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 531

MATLAB R2022b 安装教程

1. 下载安装先放资源链接,百度网盘太贵了不想续了,换了夸克网盘。1. 下载安装。

qq_51654158的博客 2万+

Redis 中数据的持久化

Redis 中数据的持久化

m0_52106292的博客 2083

CTF-Web学习笔记:服务端请求伪造(SSRF)篇

本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。

Deng7326的博客 1684

Redis数据持久化

通过本篇博文学习Redis的持久化操作!

孤夜的博客 3839

【Simulink教程案例7】基于Simulink的滑模控制器设计与实现

欢迎订阅滑膜控制是一种变结构控制策略,其和常规控制方法的主要区别在于控制的不连续性,即一种使系统结构随时间变化的开关特性。所以,滑膜控制器也叫做变结构控制器,其本质是一类特殊的非线性控制器,并且这种非线性为不连续性。滑膜控制器和其他控制方式最大的区别在于其结构的不固定性,在其工作过程中,系统当前的状态会发生变化,使得系统按照预先设置的“滑动模态”的状态轨迹运动。正是由于这个特点,滑膜控制器具有快速响应的优点。滑模控制的基本定义如下所示:1).穿越切换面上的某个点;2).从切换面上的某个点离开;

FPGA/MATLAB学习教程/源码/项目合作开发 3237

基于Simulink的电动汽车电池管理系统热管理优化仿真

电动汽车电池管理系统(Battery Management System, BMS)中的热管理是确保电池性能、安全性和寿命的关键环节。温度过高或过低都会显著影响电池的工作效率和寿命,因此需要对电池组进行精确的热管理。基于MATLAB/Simulink的仿真平台可以用于建模和优化电池热管理系统,包括热分布预测、冷却策略设计以及热平衡控制等。本项目旨在构建一个完整的电动汽车电池热管理优化仿真模型,并通过仿真验证系统的性能。

xiaoheshang_123的博客 455

redis数据持久化

redis数据持久化策略

m0_62909831的博客 1262

13、多实例任务(multi instance)

多实例任务,是指一个类型的任务需要循环执行多次,包括串行多实例任务和并行多实例任务。

leyoliu的博客 3197

Redis 的数据持久化

Redis 的数据持久化的两种策略(AOF 和 RDB)

ミカミミミ博客 1306

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[Redis] Redis数据持久化

我们之前在学习MySQL数据库的时候,我们学习过MySQL事务的四个比较核心的特性:分别是原子性(把对多个表的操作打包为一个操作),一致性(事务前后的数据都是合法数据,比如同一个操作中同时减少和增加一个值,要不同时成功,要不同时失败,不能出现中间状态),持久性(把数据存储在硬盘上),隔离性(脏读,不可重复读,幻读,串行化).

无需多言 2691

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Redis数据持久化操作

Redis数据持久化,AOF持久化实践,RDB持久化实践

Bob516516的博客 892

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Redis数据持久化总结笔记

Redis数据持久化是确保Redis中数据不因服务器故障而丢失的重要机制。Redis提供了两种主要的数据持久化方法:RDB和AOF,以及它们的混合持久化。RDB持久化是通过创建数据快照的方式,将某一时刻的数据集保存到硬盘上的RDB文件中。AOF持久化则是记录每次写操作命令并追加到AOF文件中。混合持久化是Redis 4.0引入的新特性,它结合了RDB和AOF的优点。在数据恢复时可以先通过RDB文件快速恢复大部分数据,然后通过AOF文件恢复快照之后的数据变更,从而加快了数据恢复速度并减少了数据丢失的风险

1064

Redis高可用—数据持久化

Redis高可用—数据持久化一、为什么需要持久化?二、Redis数据持久化方式1. RDB持久化1.1 什么时候触发RDB持久化?1.1.1 手动触发1.1.2 自动触发1.2 redis.conf 中RDB相关配置1.3 RDB持久化步骤2. AOF持久化2.1 redis.conf 中AOF相关配置2.2 AOF持久化步骤2.3 AOF重写2.3.1 为什么AOF重写?2.3.2 AOF重写触发机制2.3.3 AOF重写步骤3. RDB和AOF对比4. 持久化文件加载机制三、参考文献 Redis的高可用

zpy20120201的博客 3033

Redis 数据持久化

Redis持久化机制包含RDB和AOF两种方式。RDB通过定时快照保存数据,适合大规模数据恢复但可能丢失最后一次修改;AOF记录所有写操作命令,数据更安全但文件较大。RDB使用fork子进程和写时复制技术实现快照,AOF通过追加日志和重写机制优化文件大小。实际应用中建议混合使用RDB和AOF,既能保证数据安全又能提高恢复效率。根据业务需求选择持久化策略:对数据完整性要求不高时选择RDB,需要高可靠性时启用AOF,或两者结合使用以获得最佳效果。

2301_80348933的博客 743

【Redis】Redis 数据持久化RDB & AOF

Redis的持久化是指将数据从内存中保存到磁盘上,以确保在Redis重启或崩溃时能够恢复数据。Redis支持两种主要的持久化方式:RDB(Redis Database)和AOF(Append Only File)。

chenzhong373095238的博客 1323
上一篇: Redis发布订阅及事务管理
下一篇: Python:变量与数据类型
Smiling Mr. Rui
博客等级 码龄5年 1438粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smiling Mr. Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值