Redis之持久化

news/2024/10/6 1:38:13

Redis持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!

RDB(Redis DataBase)

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

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

1、测试持久化操作

  • 修改配置文件
#vi  redis.confsave 60 5                  #只要60s内修改了5次key,就会触发rdb操作
dbfilename dump.rdb        #RDB持久化文件
  • 删除默认的rdb文件
#cd /usr/local/bin/dump.rdb
# ls
dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
# rm -rf dump.rdb
# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
  • 创建KEY,60s内创建完成
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 v4
OK
127.0.0.1:6379> set k5 v5
OK
  • 生成新的dump.rdb文件
# ls
dump.rdb         redis-check-aof  redis-cli       redis-server redis-benchmark  redis-check-rdb  redis-sentinel

2、触发机制

  • save的规则满足的情况下,会自动触发rdb规则;
  • 执行 flusha 命令,也会触发rdb规则;
  • 退出redis,也会产生 rdb 文件;

3、如果恢复rdb文件
只需要将rdb文件放在我们redis启动目录就可以,redis启动的时候会自动检査dump.rdb 恢复其中的数据。

  • 获取RDB文件的目录
127.0.0.1:6379> CONFIG get dir
1) "dir"
2) "/usr/local/bin"

4、优点&缺点
优点

  • 适合大规模的数据恢复
  • 对数据的完整性要不高
    缺点
  • 需要一定的时间间隔进程操作,如果redis意外宕机了,这个最后一次修改数据就没有的了
  • fork进程的时候,会占用一定的内容空间

AOF(Append Only File)

将我们的所有命令都记录下来,类似mysql二进制文件,恢复的时候就把这个文件全部在执行一遍。

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件。
redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
Aof保存的是 appendonly.aof 文件

1、测试AOF

  • 修改配置文件
#vi  redis.conf
appendonly yes
  • 重启服务
# redis-cli -p 6379
127.0.0.1:6379> SHUTDOWN
not connected> exit
# redis-server /data/apps/redis-7.0.15/redis.conf
  • 数据写入
# redis-cli -p 6379
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k6 v6
OK
  • 生成aof文件
# ls
appendonly.aof redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

2、aof修复工具
如果这个 aof 文件有错位,造成 redis无法启动,我们需要修复这个aof文件,redis 给我们提供了一个工具。

redis-check-aof --fix  appendonly.aof

3、优缺点
优点

  • 每一次修改都同步,文件的完整会更加好!
  • 每秒同步一次,可能会丢失一秒的数据
  • 从不同步,效率最高的!
    缺点
  • 相对于数据文件来说,aof远远大于 rdb,修复的速度也比 rdb慢!
  • Aof 运行效率也要比 rdb 慢,所以我们redis默认的配置就是rdb持久化!

4、重写机制
如果 aof 文件大于 64m,会fork一个新的进程来将我们的文件进行重写

参考

https://blog.csdn.net/m0_62218217/article/details/129899051

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/43111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MySql JOIN

MySql JOIN 背景 最近在做一些项目时需要对数据库进行简单的 select ,由于之前一直在做 HTML + JS + CSS 所有对数据库不是很了解,现在从 0 开始学习,每天学习一点,做个理解总结。有理解偏差欢迎留言指正。 简介 JOIN 用于根据两个或多个表之间关系,查询数据inner join 内…

presto 查询调度流程 (Coordinator Scheduler)

based on tag: 0.287 presto的 scheduler 是 SqlQueryScheduler 这个类控制的, 这个class主要是负责调度物理执行计划。调度具体的每个SqlStageExecution. 这个Stage可以当成Fragment的一个概念他会先把所有的stage创建一个schedule计划。一共有两种schedule计划,一个是all-at…

MyBatisX插件逆向工程和SQL生成使用

1.MyBatisX插件逆向工程将表映射成实体类 在IDEA中装好MyBatisX插件并连接数据库后,对咬映射成实体类的表点击鼠标右键,如下图所示:之后会弹出如下界面:然后根据如图信息进行配置,点击next。如果使用的是MyBatis-Plus3直接按照下图选项即可:至此结束逆向工程将表映射成实…

RSA算法中,为什么需要的是两个素数?

RSA算法是一种广泛使用的非对称加密技术,基于大数分解的困难性。本文将探讨为什么RSA算法需要两个素数,并以通俗易懂的例子解释其原理,同时提供专业分析和必要的数学背景。PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态…

2024-06-11 微信小程序上传代码提示超过xx兆?==》npm run build

平常上传小程序都是直接点上传,这个会直接把dev的包给上传,自然会比较大,可以通过命令npm run build来压缩包,从而减少包的体积 然后用微信开发者工具新建一个项目,选中build包,点击上传即可

Gitee仓库+宝塔WebHook实现线上与仓库代码同步更新

本文由 ChatMoney团队出品进行以下操作时,请确保已经在gitee添加了SSH公钥(Gitee个人设置->SSH公钥)宝塔上安装WebHook​编辑​找到WebHook,点击设置,点击添加,名称自行根据项目填写,脚本填写以下代码: #!/bin/bash echo "" # 输出当前时间 date --date=0…

数据可视化是如何在智慧展厅中发挥作用的?

数据可视化是如何在智慧展厅中发挥作用的?随着科技的进步,智慧展厅成为展示信息、互动体验和传递品牌价值的前沿平台。数据可视化作为智慧展厅的重要组成部分,通过将复杂的数据转化为直观的图形、图表和互动界面,极大地提升了展厅的展示效果和观众的参与感。首先,数据可视…

Vue 打包 Error: error:0308010C:digital envelope routines::unsupported

这个错误通常与Node.js的加密模块和OpenSSL版本有关 出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响. js/app.8d066b51.js from Terser Error: error:0308010C:digital envelope…