redis的持久化

ByteAetherX
• 阅读 1641

redis持久化

作用:redis 的所有数据保存在内存中,redis持久化就是可以把内存中保存的数据放进磁盘中。

方式:

方式 类似
RDB 快照
AOF 写日志,把新的记录添加到末尾

RDB

原理

其实RDB的原理就是类似于创建快照。

实现的方式
  • save命令
save

save命令是同步的,对于特别大的数据和访问量大的网站都会发生阻塞

  • bgsave命令
bgsave

bgsave命令是异步的,所以不会造成命令阻塞,但是因为该命令会额外的创建一个进程的子进程,所以会产生一定量的开销

  • 自动生成,就是达到某个条件时,ROF文件就会自动生成,在配置文件下可以看到以下几个配置
save 900 1
save 300 10
save 60 10000

例如:在900秒内有一次改变就发生save命令

建议的配置

dbfilename #二进制文件(快照)的名字
dir#二进制文件存放的位置
stop-write-on-bgsave-error#bgsave失败,是否停止写入
rdbcompression#是否使用压缩格式
rdbchecksum#对二进制文件进行校验

文件策略:存在老的RDB文件,新的就会替换老的

缺点:耗时,耗性能,不可控,丢失数据

AOF

原理

类似于我们写日志,把操作的每一条命令行都记录到日志文件中

三种策略(其实就是配置的三种选项)
  • always (会把每一条命令都实时得写入到aof文件中)
  • everysec(默认,会把每一秒执行的命令记录到aof文件中)
  • no(根据系统来决定何时记录到aof文件中)
命令 always everysec no
优点 不丢失数据 每一秒执行一个同步 不用管
缺点 IO开销大 有可能丢失一秒的数据 不可控
AOF的重写
原理:

因为在我们实际的使用中,有很多的命令是重复的,多余的或者是过期的,例如set hello wordset hello Peter,实际上只有后句命令才有效,而重写就是只记录了后面的那一句话。

重写的作用
  • 减少磁盘占用量
  • 加速恢复速度
重写的两种实现的方法
  • bgrewriteaof

类似于RDB中的bgsave命令

  • AOF重写配置

其实也是在内部调用bgrewriteof

配置名 含义
auto_aof_rewrite_min_size AOF文件重写需要的尺寸
auto_aof_rewrite_percentage AOF文件增长率

AOF的统计

统计名 含义
aof_current_size AOF当前的尺寸(单位:字节)
aof_base_size AOF上次启动和重写的尺寸(单位:字节)

通过配置启动重写的条件

  • aof_current_size > auto_aof_rewrite_min_size
  • (aof_current_size - aof_base_size) / aof_base_size > auto_aof_rewrite_percentage
AOF的流程

redis的持久化

注意:3-1:当AOF文件重写的过程中,新的数据也会写入到日常的AOF文件中。5-2则是在AOF文件重写的时间段期间有新的命令传进来也会被重写进当前正在重写的AOF文件中。(语文水平有限,哈哈,希望能理解)

AOF的相关配置
appendonly yes #使用AOF一定要开启配置
appendfilename "appendonly-${port}.aof" #AOF文件的名称
appendfsync everysec #AOF文件的策略
dir / #存放的地址
no_appendfsync_on_rewrite yes #这个配置就是说明在AOF重写的过程中不进行日常的AOF文件写入
auto_aof_rewrite_percentage 100
auto_aof_rewrite_min_size 64mb

AOF和RDB的抉择

命令 RDB AOF
启动优先级
体积
恢复速度
数据安全性 丢数据 根据策略决定
轻重
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Django 之redis的应用
redis概述redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表队列和栈,set集合,sortedset有序集合,hash(hash表))
Stella981 Stella981
3年前
NoSQL数据库Redis和MongoDB
redis简介一些特点:Redis的读写性能极高,并且有丰富的特性(发布/订阅、事务、通知等)。Redis支持数据的持久化(RDB和AOF两种方式),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis支持多种数据类型,包括:string、hash、list、set,zset、bitm
Wesley13 Wesley13
3年前
qhfl
Redis  Redis是完全开源免费的,遵守BSD协议,是一个高性能的keyvalue数据库。  Redis有以下特点:    Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。    Redis支持五种数据类型。    Redis支持数据库备份。  Redi
可莉 可莉
3年前
051. Redis 持久化机制
1\.持久化介绍Redis的数据存在在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。!image20200511165351687(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
051. Redis 持久化机制
1\.持久化介绍Redis的数据存在在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。!image20200511165351687(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Redis——持久化数据
Redis被称为是内存数据库,那是因为它会将其所有数据存储在内存里,因此Redis具有强劲的速度性能,但是,也正因为数据存储在内存中,当Redis重启后,所有存储在内存的数据就会丢失。为了使得数据持久化,Redis提供了两种方式:RDB方式和AOF方式。一、RDB方式RDB方式的持久化是通过快照(snapshotting)完成的,
Wesley13 Wesley13
3年前
Java 日期与时间
Java的日期Java没有内置的日期类,但可以导入java.time包,这个包中包含了许多类,可用于处理日期和时间。例如:<table<tbody<tr<thstyle"width:25%"Java类</th<thstyle"width:75%"描述</th</tr<tr<td<code
Stella981 Stella981
3年前
Redis—持久化
一、持久化简介Redis的数据全部存储在内存中,如果突然宕机,数据就会全部丢失,因此必须有一套机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制,它会将内存中的数据库状态保存到磁盘中。持久化发生了什么|从内存到磁盘
Stella981 Stella981
3年前
Redis持久化存储详解(一)
为什么要做持久化存储?持久化存储是将Redis存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道Redis是一个基于内存的nosql数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失。持久化存储分类在Redis中,持久化存储分为两种。一种是aof日志追加的方式
Stella981 Stella981
3年前
Redis几个问题总结
redis持久化策略redis是一个内存数据库,但是它提供了持久化机制。即把数据永久的存储在磁盘上。我们来看看这个redis保存数据的流程(1)客户端向服务端发送写操作(数据在客户端的内存中)。(2)数据库服务端接收到写请求的数据(数据在服务端的内存中)。(3)服务端调用write这个系统调用,将数据往磁盘上写(数据在系
子非鱼 子非鱼
3年前
Redis高级
第一章Redis的持久化由于redis是一个内存数据库,所有的数据都是保存在内存当中的,内存当中的数据极易丢失,所以redis的数据持久化就显得尤为重要,在redis当中,提供了两种数据持久化的方式,分别为RDB以及AOF,且Redis默认开启的数据持久化方式为RDB方式。1、RDB持久化方案Redis会定期保存数据快照至一个rbd文件中,并在启动时自动