首页 > 数据库 >Redis持久化机制

Redis持久化机制

时间:2024-04-07 19:29:20浏览次数:28  
标签:AOF 持久 Redis redis 命令 快照 写入 化机制 客户端

1.持久化机制

Redis官方提供了两种不同的持久化方法来将内存的数据存储到硬盘里面分别是:

- 快照(Snapshot)
- AOF (Append Only File) 只追加日志文件

1.1快照(Snapshot)

1. 特点

这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件因此这种方式也称之为RDB方式。

默认情况下,redis服务在哪个目录下启动,哪个目录就是工作目录,后面的rdb持久化或者AOF持久化,产生的文件都存在于redis的当前工作目录下。在哪里启动就会读取哪里的快照文件

2.快照生成方式 

  • 客户端方式: BGSAVE 和 SAVE指令

  • 服务器配置自动触发

# 1.客户端方式之BGSAVE
- a.客户端可以使用BGSAVE命令来创建一个快照,当接收到客户端的BGSAVE命令时,redis会调用fork¹来创建一个子进程,然后子进程负责将快照写入磁盘中,而父进程则继续处理命令请求。
    
`名词解释: fork当一个进程创建子进程的时候,底层的操作系统会创建该进程的一个副本,在类似于unix系统中创建子进程的操作会进行优化:在刚开始的时候,父子进程共享相同内存,直到父进程或子进程对内存进行了写之后,对被写入的内存的共享才会结束服务`

 # 2.客户端方式之SAVE
- b.客户端还可以使用SAVE命令来创建一个快照,接收到SAVE命令的redis服务器在快照创建完毕之前将不再响应任何其他的命令

 # 3.服务器配置方式之满足配置自动触发
- 如果用户在redis.conf中设置了save配置选项,redis会在save选项条件满足之后自动触发一次BGSAVE命令,如果设置多个save配置选项,当任意一个save配置选项条件满足,redis也会触发一次BGSAVE命令

# 4.服务器接收客户端shutdown指令
- 当redis通过shutdown指令接收到关闭服务器的请求时,会执行一个save命令,阻塞所有的客户端,不再执行客户端执行发送的任何命令,并且在save命令执行完毕之后关闭服务器 

 3.配置生成快照名称和位置

#1.修改生成快照名称
- dbfilename dump.rdb

# 2.修改生成位置
- dir ./

1.2 AOF 只追加日志文件

1.特点:

这种方式可以将所有客户端执行的写命令记录到日志文件中,AOF持久化会将被执行的写命令写到AOF的文件末尾,以此来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集.

2.开启AOF持久化

在redis的默认配置中AOF持久化机制是没有开启的,需要在配置中开启

# 1.开启AOF持久化
- a.修改 appendonly yes 开启持久化
- b.修改 appendfilename "appendonly.aof" 指定生成文件名称

3.日志追加频率

# 1.always 【谨慎使用】
- 说明: 每个redis写命令都要同步写入硬盘,严重降低redis速度
- 解释: 如果用户使用了always选项,那么每个redis写命令都会被写入硬盘,从而将发生系统崩溃时出现的数据丢失减到最少;遗憾的是,因为这种同步策略需要对硬盘进行大量的写入操作,所以redis处理命令的速度会受到硬盘性能的限制;
- 注意: 转盘式硬盘在这种频率下200左右个命令/s ; 固态硬盘(SSD) 几百万个命令/s;
- 警告: 使用SSD用户请谨慎使用always选项,这种模式不断写入少量数据的做法有可能会引发严重的`写入放大`问题,导致将固态硬盘的寿命从原来的几年降低为几个月。

# 2.everysec 【推荐默认】
- 说明: 每秒执行一次同步显式的将多个写命令同步到磁盘
- 解释: 为了兼顾数据安全和写入性能,用户可以考虑使用everysec选项,让redis每秒一次的频率对AOF文件进行同步;redis每秒同步一次AOF文件时性能和不使用任何持久化特性时的性能相差无几,而通过每秒同步一次AOF文件,redis可以保证,即使系统崩溃,用户最多丢失一秒之内产生的数据。 

# 3.no    【不推荐】
- 说明: 由操作系统决定何时同步 
- 解释:最后使用no选项,将完全由操作系统决定什么时候同步AOF日志文件,这个选项不会对redis性能带来影响但是系统崩溃时,会丢失不定数量的数据,甚至丢失全部数据,另外如果用户硬盘处理写入操作不够快的话,当缓冲区被等待写入硬盘数据填满时,redis会处于阻塞状态,并导致redis的处理命令请求的速度变慢。

4.修改同步频率

修改日志同步频率

--修改appendfsync  everysec | always | no 指定

标签:AOF,持久,Redis,redis,命令,快照,写入,化机制,客户端
From: https://blog.csdn.net/Szy66677/article/details/137474742

相关文章

  • Redis的前世今生(内存管理、持久化、高可用、集群 详解)一看就懂
    Redis的诞生:    redis的诞生和mysql脱不了关系,在redis还未出现时,用户的每次请求都是直接访问mysql,渐渐的人们发现,请求大部分都是读操作,而且很多都是重复的数据,磁盘的i/o是很慢的,所以人们就想,能不能学学cpu建立的缓存机制,mysql也搞一个缓存,就这样一个基于内存的数据库......
  • 为什么Redis 是单线程的以及为什么这么快?
    redis完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据结构简单,对数据操作也简单,redis中的数据结构是专门进行设计的采用单线程模型,避免了不必要的上下文切换和竞争条件,也不存在多线程或者多线程切换而消耗CPU,不用考虑各种锁的问题,不存在加锁,释放锁的操作......
  • redis开发规约
    key设计1、可读性和可管理性#业务名:表名:idgetpersoninfo:person:12、简洁性减少key长度,建议不超过39字节例子humanresource:employee:88301->hr:emp_883013、特色字符key不要包含特殊字符(空格,换行,引号),建议使用英文与数字不同类型的应用场景 序列化JdkS......
  • Redis 一般有哪些使用场景?
    热点数据的缓存缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。而且逐渐有取代memcached,成为首选服务端缓存的组件。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。限时业务的运用redis中可以使用expire命令设置一个键的生存时间,......
  • redis基本操作
    基本类型string字符串#get/set-获取设置值setkey"value"#设置key的值为valuegetkey#获取key的值#getset-获取设置值getsetdbmongodb#没有旧值,返回nilgetsetdbredis#返回mongodb#setnx-nil时设置(分布式锁......
  • 使用redis-server &启动redis,没有读取到最新配置
    今天搭redis主从架构的时候,使用 redis-server& 启动redis时,一直没有读取到修改后的配置文件,得使用 redis-server/home/redis-7.2.4/redis.conf& 才可以后面查了下,redis.conf配置中开头有一段注释,说明为了读取配置文件,必须在启动Redis时将配置文件路径作为第一个参数传递......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
    鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
     鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的......
  • redis自学(29)AOF持久化
    AOFAOF全称为AppendOnlyFile(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。  AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:  AOF的命令记录的频率也可以通过redis,conf文件来配:  从上到下是可靠性越来越低,但是性能......
  • Redis持久化(Redis persistence)
    Redis持久化:HowRediswritesdatatodisk(怎么把数据从内存中写入硬盘) 一、RDB(RedisDataBase)  RDB:以指定的时间间隔执行数据集的时间点快照(snapshot),将数据和状态以文件的形式写入磁盘,快照文件称为RDB文件(dump.rdb),保存备份是它执行的是全量快照(保存内存中的全部数据)。 (1)......