redis追加持久化-aof(append only file)

aof持久化本质:将用户执行的”写”指令保存到文件中,恢复数据的时候就是执行这些写指令
aof需要开启,开启aof时需要注意,开启时会清空redis的内部数据
appendonly no 修改成 appendonly yes,你可以自己指定filename
这里写图片描述
修改完成之后,重启redis服务,因为我是通过源码安装的,所以我有两种重启方式
1,./redis-cli -p 6380 shutdown
2,ps -A|grep redis 找到redis进程,kill -9 进程号
启动:./redis-server redis.conf
这里写图片描述
如果是用apt-get或者yum install安装的redis,可以直接通过下面的命令停止/启动/重启redis

/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

redis数据被清空

name:0>keys *
name:0>

添加数据:

name:0>set a 10
OK

name:0>set b 20
OK

name:0>set addr shanghai
OK
这里写图片描述

[root@localhost bin]# vim appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$1
a
$2
10
*3
$3
set
$1
b
$2
20
*3
$3
set
$4
addr
$8
shanghai
里面保存的都是命令!

aof同步的频率
这里写图片描述
always每改变一个就同步一次[数据最安全,效率最低]
everysec每秒同步一次[较安全,效率较高,但是也有可能丢失一秒钟的数据]
no 并不是不备份,是由服务器当前的忙碌状态决定备份频率[性能最好,数据安全最差]
推荐使用第二个

关于aof的优化
看一个列子

创建一个num,并累加12次,最终在redis中存储的数据为12,让我们看一看appendonly.aof中是怎么存储这些命令的。

name:0>incr number
1

name:0>incr number
2

name:0>incr number
3

name:0>incr number
4

name:0>incr number
5

name:0>incr number
6

name:0>incr number
7

name:0>incr number
8

name:0>incr number
9

name:0>incr number
10

name:0>incr number
11

name:0>incr number
12

首先大小变成了428
这里写图片描述

[root@localhost bin]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$1
a
$2
10
*3
$3
set
$1
b
$2
20
*3
$3
set
$4
addr
$8
shanghai
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number

我们发现incr number被存了12次,属于重复存储,因为这十二次命令等价于set number 12
优化命令./redis-cli -h ip -p port bgrewriteaof
这里写图片描述
优化之后,文件大小变为149
看一看里面的内容
这里写图片描述

set number 12

总结1:快照持久化和aof持久化是互补关系,快照持久化做大的持久化,aof做细致的持久化
【总结2:redis重启之后,会在本地把数据重新读取到内存中,那么从哪儿读那?就从dump.rdb和appendonly.aof中读取,另外这两个文件可移动,假如另外一个项目需要你的数据,你就可以把这两个文件拷贝到那个项目的redis服务器里,那么它会从这里面读取你需要的数据】
我重新 验证之后发现总结2有问题,重新得出如下结论:
1,不开启aof持久化,redis从dump.rdb恢复数据,开启aof持久化redis从appendonly.aof恢复数据
2,redis在开启aof持久化之后,重启服务器,会强制同步dump.rdb数据,使之与内存数据保持一致,就是说如果appendonly.aof文件内容为空,dump.rdb不为空,重启之后,redis内部数据为空,同时dump.rdb被清空,这一点要特别特别注意!!!因为有一种情况也许会发生,就是你刚开始并没有设置aof持久化,后来才设置,这个时候你的数据将全部丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值