redis aof文件过大问题

http://www.itnose.net/detail/6682725.html

最近新安装了一台redis,版本为redis-3.2.5

数据盘用的是固态硬盘。

之前用的是普通硬盘,redis日志天天报

Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.

换了固态硬盘,就没报了。

用了3天,发现aof文件越来越大。

-rw-r--r-- 1 root root 136672283898 Dec  9 08:50 appendonly_6379.aof

-rw-r--r-- 1 root root   5200941168 Dec  7 18:09 temp-rewriteaof-26452.aof

本身redis用了19G内存,但是aof文件达到了128G

每天早上起床都要把磁盘扩容一次才行,不然磁盘就满了,烦死了。

可是这样下去,不能解决问题,毕竟是云服务器,每天加钱扩容也不好。

后来在网上,发现有一个命令BGREWRITEAOF,可以优化aof文件

步骤如下:

先进入redis

redis-cli -p 6379 -h 127.0.0.1

127.0.0.1:6379>BGREWRITEAOF

再去查看aof文件的目录,发现多了一个文件

-rw-r--r-- 1 root root 136672283898 Dec  9 08:51 appendonly_6379.aof

-rw-r--r-- 1 root root   5851018456 Dec  9 08:51 temp-rewriteaof-1927.aof

-rw-r--r-- 1 root root   5200941168 Dec  7 18:09 temp-rewriteaof-26452.aof

等待几分钟

再次查看aof文件

-rw-r--r-- 1 root root 22477825463 Dec  9 09:11 appendonly_6380.aof

-rw-r--r-- 1 root root   5200941168 Dec  7 18:09 temp-rewriteaof-26452.aof

已经明显减少了

再把temp-rewriteaof-26452.aof文件删除,它已经没有用了

我突然发现一个问题

执行了BGREWRITEAOF之后,temp-rewriteaof之类的文件,就再也没有产生了,好神奇。

引用相关解释:

BGREWRITEAOF

执行一个 AOF文件 重写操作。重写会创建一个当前 AOF 文件的体积优化版本。

即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 BGREWRITEAOF 成功之前不会被修改。

重写操作只会在没有其他持久化工作在后台执行时被触发,也就是说:

如果 Redis 的子进程正在执行快照的保存工作,那么 AOF 重写的操作会被预定(scheduled),等到保存工作完成之后再执行 AOF 重写。在这种情况下, BGREWRITEAOF 的返回值仍然是 OK ,但还会加上一条额外的信息,说明 BGREWRITEAOF 要等到保存操作完成之后才能执行。在 Redis 2.6 或以上的版本,可以使用 INFO 命令查看 BGREWRITEAOF 是否被预定。

如果已经有别的 AOF 文件重写在执行,那么 BGREWRITEAOF 返回一个错误,并且这个新的 BGREWRITEAOF 请求也不会被预定到下次执行。

从 Redis 2.4 开始, AOF 重写由 Redis 自行触发, BGREWRITEAOF 仅仅用于手动触发重写操作。

我都已经3.2.5,貌似redis没有自动触发BGREWRITEAOF

算了,还是每天定期的去执行一次

写了一个脚本

brgewriteaof.sh

内容如下:

#!/bin/bash

/usr/local/redis/redis-cli -p 6379 -h 127.0.0.1 BGREWRITEAOF

添加权限

chmod 755 brgewriteaof.sh

设定任务计划,每天凌晨2点跑一次

0 2 * * * /opt/brgewriteaof.sh

时间: 2024-10-18 11:13:55

redis aof文件过大问题的相关文章

REdis AOF文件结构分析

REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示: 从REdis-5.0开始,AOF有文件头,目的是支持同时加载RDB和AOF文件.AOF文件头和RDB文件头基本相同,但RDB文件头多了三个字段. 先看AOF和RDB通用部分的文件头内容: 1) 头5字节固定为REDIS 2) 第6~9共四字节为RDB版本号 3) 接下来为redis-ver和它的值,即redis版本 4) 接着redis-bits和它的值,即re

redis 持久化 如果 AOF 文件出错了,怎么办?

服务器可能在程序正在对 AOF 文件进行写入时停机, 如果停机造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会拒绝载入这个 AOF 文件, 从而确保数据的一致性不会被破坏. 当发生这种情况时, 可以用以下方法来修复出错的 AOF 文件: 为现有的 AOF 文件创建一个备份. 使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复. $ redis-check-aof --fix (可选)使用 diff -u 对比修复后的 AOF

redis怎么将rdb文件和aof文件还原数据库

1   AOF ----->      appendonly  yes     2  cp   appendonly.aof 到redis的数据库目录也就是配置文件里面的dir关键字   3  重启服务 2  RDB  ----->      appendonly   no     2 cp    dump.rdb到redis数据库目录也就是配置文件里面的dir关键字   3  重启服务 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加

redis的redis.conf文件详解

是2.6.12版本的 1 redis.conf配置文件 2 3 # Redis configuration file example 4 5 # Note on units: when memory size is needed, it is possible to specifiy 6 # it in the usual form of 1k 5GB 4M and so forth: 7 # 8 # 1k => 1000 bytes 9 # 1kb => 1024 bytes 10 # 1m

Redis源码剖析和注释(十八)--- Redis AOF持久化机制

Redis AOF持久化机制 1. AOF持久化介绍 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题. RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失. AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的. Redis RDB持久化机制源码剖析和注释 AOF的使用:在redis.conf配置文件中,将appendonly设置为y

redis AOF保存机制

网上说AOF有三种保存方式,不自动保存.每秒自动保存.每命令自动保存. 其中每秒自动保存这个看起来很美好,但是可能会被各种IO的时间所延迟,所以究竟是怎么判断每秒保存的,并不是太明白,故有此文. AOF 命令同步 Redis 将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件, 以此达到记录数据库状态的目的, 为了方便起见, 我们称呼这种记录过程为同步. 举个例子, 如果执行以下命令: redis> RPUSH list 1 2 3 4 (integer) 4 redis> LRA

Redis AOF 全持久化

简介: Redis AOF 持久化,将每次接收到更改 redis 数据的操作都记录到一个 aof 文件,当服务器意外宕机或 redis 服务器非法关闭时,不会丢失数据. 可以做到数据安全化,但是性能会受到影响. 1.修改 redis.conf shell > vim /usr/local/redis/redis.conf daemonize yes port 6379 timeout 300 loglevel debug pidfile /usr/local/redis/logs/redis.p

redis学习(二)redis.conf文件配置

取自: https://www.cnblogs.com/pqchao/p/6558688.html 为了更好的使用redis,我们需要详细的了解redis配置文件及相关参数作用. bind 127.0.0.1 bind 192.168.1.100 绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址.这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接.如果bind选项为空的话,那会接受所有来自于可用网络接口的连接.如上配置,绑定一个127.0.0.1的本机

Redis AOF持久化和RDB持久化区别

一.redis持久化----两种方式 1.redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File). 2.RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上: 3.AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了. 4.其实RDB和AOF两种方式也可以同时使用,在这种情况