redis持久化

一持久化

1.1 什么是持久化

redis的所有数据保存在内存中,对数据的更新将异步的保存到硬盘上

1.2 持久化的实现方式

# 数据库(mysql,redis,mongodb,rabbitmq,infludb,clickhose,kafak)--->持久化方法通常是以下两种
    快照:某时某刻数据的一个完成备份,
     -mysql的Dump
     -redis的RDB
    写日志:任何操作记录日志,要恢复数据,只要把日志重新走一遍即可
      -mysql的 Binlog
      -Redis的 AOF
# redis支持 :3中方案
	-rdb方案:在某一刻完成备份
    -aof方案:每个操作都会有日志,恢复的时候,把日志重放即可
    -混合持久化:rdb+aof方案
    	-aof重写
        -隔一段时候,会把之前的日志做成rdb文件放在日志文件中,后续的继续使用aof方案记录日志
        -达到快速恢复的目的
        
http://www.taodudu.cc/news/show-5528045.html?action=onClick

二 rdb方案

2.1 使用

# 触发机制-主要三种方式
# save(同步)--->阻塞-->如果数据量很多--->影响redis的查询操作
save

# bgsave(异步,Backgroud saving started)


# 自动(通过配置)
配置   seconds   changes
save   900        1
save   300        10
save   60         10000

如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb

2.2 RDB问题

  • 耗时,耗性能:
  • 不可控,可能会丢失数据

三 AOF

3.1 AOF介绍

客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复

3.2 # AOF的三种策略

日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–>写命令刷新的缓冲区—>每条命令fsync到硬盘—>AOF文件
everysec(默认值):redis——>写命令刷新的缓冲区—>每秒把缓冲区fsync到硬盘–>AOF文件
no:redis——>写命令刷新的缓冲区—>操作系统决定,缓冲区fsync到硬盘–>AOF文件
命令 always everysec no
优点 不丢失数据 每秒一次fsync,丢失1秒数据 不用管
缺点 IO开销大,一般的sata盘只有几百TPS 丢1秒数据 不可控

3.3 AOF 重写

随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题
- 本质就是把过期的,无用的,重复的,可以优化的命令,来优化
- 这样可以减少磁盘占用量,加速恢复速度

实现方式

bgrewriteaof:

客户端向服务端发送bgrewriteaof命令,服务端会起一个fork进程,完成AOF重写

AOF重写配置:

配置名 含义
auto-aof-rewrite-min-size AOF文件重写需要尺寸
auto-aof-rewrite-percentage 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配置

appendonly yes  # 是否开启aof持久化
appendfilename "appendonly.aof"  # 指定 AOF 文件名
# Redis支持三种不同的刷写模式:
# appendfsync always # 每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
appendfsync everysec # 每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
# appendfsync no     # 完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。
dir /root/lqz/redis/data  # 配置持久化文件存放位置


appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec 
dir /root/lqz/redis/data

7.3 混合持久化

# 必须先开启AOF,再加入一条配置
aof-use-rdb-preamble yes
posted @ 2023-08-29 12:30  星空看海  阅读(24)  评论(0编辑  收藏  举报