首页 > 数据库 >Redis 数据库的持久化

Redis 数据库的持久化

时间:2023-04-05 13:22:48浏览次数:32  
标签:AOF 持久 文件 Redis 数据库 redis 命令 RDB

1、Redis 持久化

1.1 什么是持久化   持久化可以理解为数据的永久存储,就是将数据存储到一个不会丢失的地方。如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就是一种持久化。   1.2 Redis 的持久化   Redis 的数据存储在内存中,内存是瞬时的,如果系统宕机或重启,又或者 Redis崩溃或重启,所有内存数据都会丢失。为解决这个问题,Redis 提供两种机制对数据进行持久化存储,以便发生故障后能迅速恢复数据。   Redis 提供了两种数据持久化有方式:   (1) RDB:redis database backup file,是 redis 默认的持久化方式   (2)AOF:append of file   2、RDB 持久化策略 2.1 什么是 RDB 方式   RedisDatabase(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。   快照文件称为 RDB 文件,保存了在某个时间点的全部数据,默认是保存在当前运行目录,默认文件名是 dump.rdb,该文件会自动创建。   RDB 技术非常适合做数据备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响 Redis 的正常使用。   2.2 备份时机 RDB 持久化在四种情况下会执行: (1) 执行 save 命令 (2)执行 bgsave 命令 (3)Redis 停机 (4)触发 RDB 条件   2.3 save 命令执行 RDB 步骤: (1)启动 redis 服务器,并用 redis-cli 连接该服务器。 (2)在客户端中执行 save 命令。 (3)查看 redis 的安装路径,可以发现 redis 自动创建了 dump.rdb 文件。   注意:save 命令会使用主进程来执行 RDB,这个过程中其它所有命令都会被阻塞,因此一般在关闭 redis 之前或在数据迁移时可能会用到该命令。   2.4 bgsave 命令执行 RDB 步骤: (1)在客户端中执行 bgsave 命令。 (2)该命令也会自动创建 dump.rdb 文件。 (3)bgsave 命令可以异步执行 RDB:执行后会开启独立进程完成 RDB,主进程可以继续处理用户请求,不受影响。   2.5 停机时 Redis 自动执行 save 命令 步骤: (1)在客户端中执行先存入键值对,然后再执行shutdown命令。 (2)该命令也会自动创建 dump.rdb 文件。 (3)重新启动 redis 服务器。 (4)重新用客户端连接 redis 服务器,可以查询到执行shutdown命令前存入的数据。   redis 服务器重新启动时,会自动读取 dump.rdb 文件,恢复了数据。   2.6 触发 RDB 的条件   Redis 在配置文件 redis.conf 中,设置了触发 RDB 的机制,打开配置文件,可以找到以下参数:

 

该参数表示执行 RDB 生成快照文件的时间策略。 配置格式:save <seconds> <changes> 功能:当在“N 秒内数据集至少有 M 个 key 改动”这一条件被满足时, 自动保存一次数据集。如: 900 秒内,如果至少有 1 个 key 被修改,则执行 bgsave 。 注意:  可以根据系统的需要,加入自己的触发机制  save "" ,表示禁用 RDB   2.7 RDB 的其它配置 RDB 的其他配置参数,可以在 redis.conf 文件中设置。  Dbfilename:设置 RDB 文件的名称 redis 中默认的 RDB 文件名为 dump.rdb。 在配置文件中,找到“dbfilename” ,可以修改为自己设置的 RDB 文件名。  dir:指定 RDB 文件的存储位置, RDB 文件默认存储路径是 ./ 当前目录,即 redis 的安装路径  Rebcompression:是否压缩 RDB 文件,建议不开启  注意:配置文件修改后,保存关闭。重启 redis 服务器时,要用以下命令: redis-server.exe redis.windows.conf(启动时读配置文件)   3、AOF 持久化策略 3.1 什么是 AOF 方式   为解决 RDB 方式丢失数据的问题,从 1.1 版本开始,redis 增加了一种更加可靠的方式:AOF 持久化方式。   Append-only File(AOF),Redis 每次接收到一条更新数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录)。当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。   3.2 AOF 的配置 默认情况下,AOF 是关闭的,如果在配置文件中做如下配置:  Appendonly:开启 aof 功能 appendonly:默认是 no,改成 yes 即开启了 aof 持久化  appendfilename:指定 AOF 文件名 默认文件名为 appendonly.aof ,可以修改。  dir:指定 RDB 和 AOF 文件存放的目录,默认是./  appendfsync:配置向 aof 文件写命令数据的策略  no:写命令执行完先放入 AOF 缓冲区,由操作系统决定何时将缓冲区内容写回磁盘;  always:表示每执行一次写命令,立即记录到 AOF 文件;  everysec:写命令执行完先放入 AOF 缓冲区,然后表示每隔 1 秒将缓冲区数据写到 AOF 文件,是默认方案。   三种策略对比:

 

3.3 开启AOF 步骤:  关闭 RDB 策略,打开配置文件,输入 save ""  开启 AOF 策略,打开配置文件,修改 appendonly 为“yes”  其他参数自行修改,不修改则使用默认值  保存并关闭配置文件  执行以下命令,重启 redis 服务器,并读取配置文件: redis-server.exe redis.windows.conf 用客户端连接 redis 服务器,执行存储数据的命令  查看 redis 安装目录,可以看到出现了 appendonly.aof 文件  用记事本打开 appendonly.aof 文件,可以看到写入的命令  同样,可以停止 Redis 服务,再重启,可以发现数据已恢复。   3.4 AOF 重写   因为 appendonly.aof 文件中存储的是执行命令,所以会产生很多没用的命令,因此,redis 会定期根据最新的内存数据生成新的 aof 文件。  bgrewriteof:重写 aof 文件 另外,也可以通过两个配置参数,控制 aop 文件重写的频率:  auto-aof-rewrite-min-size 64mb 表示 aof 文件至少达到了 64m 才会触发重写  auto-aof-rewrite-percentage 100 表示 aof 文件距离上次重写增长了 100%才会再次触发重写   4、两种持久化策略比较

 

 

标签:AOF,持久,文件,Redis,数据库,redis,命令,RDB
From: https://www.cnblogs.com/qiqi-yi/p/17289256.html

相关文章

  • Redis 数据库的事务机制
    1、Redis事务机制1.1事务的定义事务是指一系列操作数据库的步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。 1.2Redis的事务同样,Redis中的事务也是一组命令的集合,至少是两个或两个以上的命令。Redis事务是一个单独的隔离操作,事务中的所有命令都会序......
  • Redis事务与Lua脚本
    Redis的事务没办法保证一致性,使用Lua脚本也不能保证。Lua脚本能保证一致性,而且比redis的事务实习要简洁健壮。转载:https://maimai.cn/article/detail?fid=1538576512&efid=SQ3XsywteU9lIxil766Lxw......
  • 蓝图的使用、g对象、数据库连接池
    蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录no_blueprint_flask#项目名src#核心源码位置__init__.py#包里面实例化得到了app对象,mode......
  • flask_day03:蓝图的使用、g对象、数据库连接池
    目录回顾蓝图的使用不用蓝图,划分目录蓝图的使用步骤使用蓝图,划分小型项目目录使用蓝图,划分大型项目目录g对象g对象是什么?使用场景g和session有什么区别?数据库连接池flask操作mysql使用步骤回顾1.cbv的使用 写一个类继承MethodView,写get、post。。。 类属性decorators=[auth......
  • mysql数据库安装
    参考连接1、超级详细的mysql数据库安装指南2、MySQL安装过程中,出现CheckRequirements缺少C++动态库即MicrosoftVisualC++2013Redistributable问题二、安装步骤(基本和第一个参考链接相同,下面是差异的地方)1、检查安装要求,不可以点击Next,点击Execute会出现错误。提示没有......
  • 数据库系统原理之数据库应用设计与开发实例
    数据库应用设计与开发实例第一节需求描述与分析在此,结合某高校个性化课程在线选课的实际需求,给出一个简化的需求分析一、功能性需求1管理员后台模块学生信息管理教师信息管理课程信息管理班级信息管理2学生使用模块查询课程浏览所选课程查询成绩3教师使用模......
  • Redis未授权访问Getshell
    漏洞成因有些redis绑在0.0.0.0:6379,没有开启验证或者没有设置对未知ip来源进行限制以及默认的空密码就导致了redis默认访问但是这个普遍的漏洞极可能造成后门植入getshell,也可能造成反弹shell权限维持,甚至会造成ssh直接免密连接服务器开始复现搭建环境服务器操作系统为ubuntu......
  • flask之蓝图的使用-g对象-数据库连接池
    目录flask之蓝图的使用-g对象-数据库连接池昨日内容补充今日内容详细1蓝图的使用2g对象3数据库连接池补充flask之蓝图的使用-g对象-数据库连接池昨日内容补充#session执行流程 open_session:前端写到cookie到后端后端取出cookie对应的value值解密转到session对象中后续......
  • Android 原生 SQLite 数据库的一次封装实践
    作者:LiBingyan本文主要讲述原生SQLite数据库的一次ORM封装实践,给使用原生数据库操作的业务场景(如:本身是一个SDK)带来一些启示和参考意义,以及跟随框架的实现思路对数据库操作、APT、泛型等概念更深一层的理解。实现思路:通过动态代理获取请求接口参数进行SQL拼凑,并以接口返回值(泛型)......
  • Redis 在 vivo 推送平台的应用与优化实践
    一、推送平台特点vivo推送平台是vivo公司向开发者提供的消息推送服务,通过在云端与客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用实时推送消息的服务,支持百亿级的通知/消息推送,秒级触达移动用户。推送平台的特点是并发高、消息量大、送达及时性较高。目前现状最高......