redis 持久化方式

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据会丢失,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘上恢复数据。
redis的持久化方式有2种,一种是rdb快照持久化,是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储;另一种是aof日志持久化,是以日志的形式记录服务器锁处理的每一个写、删操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

Rdb快照的配置选项
save 900 1 // 900s内,有1条写入,则产生快照
save 300 1000 //300s内有1000次写入,则产生快照
save 60 10000 //60s内有10000次写入,则产生快照
(这三个选项都屏蔽,则rdb禁用)
stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?
rdbcompression yes // 导出的rdb文件是否压缩
Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性
dbfilename dump.rdb //导出来的rdb文件名
dir ./ //rdb的放置路径

测试案例:
窗口1

[root@myserver redis]# rm -rf dump.rdb    #先删除rdb文件
[root@myserver redis]# /usr/redis/redis-cli 
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set site www.phalcon.xyz
OK

新开一个窗口2,执行1w次请求

[root@myserver redis]# ./redis-benchmark -n 10000


...
...
...
====== MSET (10 keys) ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

98.68% <= 1 milliseconds
100.00% <= 1 milliseconds
66225.17 requests per second
[root@myserver redis]# ls  #生成一个rdb文件
redis-benchmark  redis-cli  redis.conf  redis-server dump.rdb

窗口1

127.0.0.1:6379> set address shanghai  #设置一个address
OK

窗口2

[root@myserver redis]# pkill -9 redis 杀掉redis进程

窗口1

[root@myserver redis]# /usr/redis/redis-server /usr/redis/redis.conf 开启redis
[root@myserver redis]# /usr/redis/redis-cli 
127.0.0.1:6379> get site
"www.phalcon.xyz"
127.0.0.1:6379> get address  #此时address丢失
(nil)

Aof 的配置
appendonly no #是否打开持久化
appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒写1次
appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,

no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

注: 在dump rdb过程中,aof如果停止同步,会不会丢失?
答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.
注: aof重写是指什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.
以解决 aof日志过大的问题.
问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof
问: 2种是否可以同时用?
答: 可以,而且推荐这么做
问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值