Redis AOF 全持久化

回复 收藏
Redis AOF 持久化,将每次接收到更改 redis 数据的操作都记录到一个 aof 文件,当服务器意外宕机或 redis 服务器非法关闭时,不会丢失数据。可以做到数据安全化,但是性能会受到影响。

1、修改 redis.conf

[root@study ~]# vim /usr/local/redis/redis.conf

daemonize yes
port 6379
timeout 300
loglevel debug
pidfile /usr/local/redis/logs/redis.pid
logfile /usr/local/redis/logs/redis.log

databases 16

#save 900 1
#save 300 10
#save 60 10000
#rdbcompression yes
#dbfilename dump.rdb

## 关闭 RDB 持久化

dir /usr/local/redis/data/

appendonly yes
appendfilename appendonly.aof
appendfsync everysec

## 开启 AOF 持久化,定义 aof 文件名,定义同步磁盘规则为每秒强制同步

no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

## 由于 AOF 的特性是记录每次操作,当客户端执行相同的操作时,aof 也会记录这些相同的每次操作,那么 aof 文件会不断增加。对于这个问题,可以使用 aof 文件的重写功能解决 aof 文件的增长。当 aof 文件满足一定条件时就对 aof 进行重写,重写是根据当前内存数据库中的数据进行遍历到一个临时的 aof 文件,写完后替换原来的 aof 文件。
## no-appendfsync-on-rewrite 参数表示在重写期间对新接收到的写操作不同步,暂时存在内存中,等重写完后再写入,防止与磁盘 IO 冲突。
## auto-aof-rewrite-percentage 参数表示 aof 文件增长率大于此值同时 aof 文件大于下面参数值时,触发 aof rewrite
## auto-aof-rewrite-min-size 参数表示当前 aof 文件大小大于这个值时

2、测试 Redis AOF 持久化

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# ls /usr/local/redis/data/
appendonly.aof

## 生成一个 .aof 的空文件

[root@study ~]# redis-cli
redis 127.0.0.1:6379> set name wang
OK
redis 127.0.0.1:6379> get name
"wang"
redis 127.0.0.1:6379> set name1 zhao
OK
redis 127.0.0.1:6379> get name1
"zhao"
redis 127.0.0.1:6379> set name2 lun
OK
redis 127.0.0.1:6379> get name2
"lun"
redis 127.0.0.1:6379> quit

[root@study ~]# cat /usr/local/redis/data/appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$4
wang
*3
$3
set
$5
name1
$4
zhao
*3
$3
set
$5
name2
$3
lun

## 记录了每一次操作

[root@study ~]# kill -9 `cat /usr/local/redis/logs/redis.pid`

## 像测试 RDB 一样,非法关闭 redis

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# redis-cli
redis 127.0.0.1:6379> get name
"wang"
redis 127.0.0.1:6379> get name1
"zhao"
redis 127.0.0.1:6379> get name2
"lun"
redis 127.0.0.1:6379> quit

## 启动测试 keys/value 都存在。
## 建议使用 AOF 持久化的同时也使用 RDB 半持久化,AOF 的优先级是高于 RDB 的,也就是说启动服务时是先加载 AOF ,后加载 RDB 的。
## 当 Redis 服务器磁盘坏掉时,数据如何保证不丢失? Master / slave 的方式解决!
2015-01-16 16:55 举报
已邀请:
0

hehong

赞同来自:

学习了
0

ZHAOFUYUN

赞同来自:

1
0

泡沫。

赞同来自:

那你的意思是不用rdb方式用 aof就可以??  有什么备份策略吗 同学
0

ZHAOFUYUN

赞同来自:

1

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: