Redis-cli 批量删除及AOF文件过大

Posted by Sunday on 2019-07-11

测试过程产生大量没用的key

批量删除以”laravel:*”开头的所有key

1
redis-cli keys "laravel:*"  |  xargs redis-cli del

删除大量key后,aof文件会变更大,是因为aof机制就跟记录日志一样,无论是set还是del 都会同步到aof文件中。

aof 文件依旧过大解决

1
redis-cli bgrewriteaof
1
2
3
4
5
6
7
root@web41:/data_ext/redis# ls -l
-rw-r--r-- 1 redis redis 3027553782 Jul 11 11:20 appendonly.aof

由原来2.9G缩小成18M

root@web41:/data_ext/redis# ls -l
-rw-r--r-- 1 redis redis 28985030 Jul 11 11:48 appendonly.aof

RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。
AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件,以此达到记录数据库状态的目的。

AOF重写:

  • (1) 随着AOF文件越来越大,里面会有大部分是重复命令或者可以合并的命令(100次incr = set key 100)
  • (2) 重写的好处:减少AOF日志尺寸,减少内存占用,加快数据库恢复时间。
    即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 BGREWRITEAOF 成功之前不会被修改。

在线RDB切换为AOF

注:切勿修改配置文件重启,这样会丢失所有数据的。

1
2
3
4
5
6
config set appendonly yes # 开启AOF
config set save "" # 关闭RDB 建议关闭,同时开启会增加io压力

vim /etc/redis/6379.conf
save "" # 关闭RDB
appendonly yes # 开启AOF

查看关闭RDB和开启AOF效果

1
2
3
4
5
6
7
192.168.1.41:6379> config get save
1) "save"
2) ""

192.168.1.41:6379> config get appendfsync
1) "appendfsync"
2) "everysec"