redis高级进阶5----持久化

什么叫持久化过程?
将内存中的数据保存到硬盘中。
Redis持久化的两种方式:RDB与AOF。
RDB:将当前数据进行保存,形成快照。这种方式是存储数据结果,存储格式简单,关注重点是数据。
AOF:将数据的操作过程进行保存,形成日志。该方式是存储操作过程,存储格式复杂,关注重点是数据的操作过程。
##1.RDB方式
修改redis.conf配置文件中的如下部分
1>快照生成位置
dir /usr/java/redis/redis-5.0.5/data
2>快照生成名称,一般是dump后加上端口号
dbfilename dump-6379.rdb
3>快照是否压缩,默认值是 yes,LFZ算法进行压缩
rdbcompression yes
4>快照存储后,redis使用CRC64算法进行数据校验,默认值yes
rdbchecksum yes
如下测试下数据恢复流程
1>redis采用save命令保存快照,会生成dump-6379.rdb文件
2>将该文件copy到另一台redis服务器上,启动redis服务器
3>启动redis客户端,在客户端操作redis取数据命令,发现有值,说明数据已经备份了
RDB优点:
1>RDB是一个压缩过的二进制文件,存储效率高
2>RDB存储的是某个时间点的数据快照,适合用于数据备份、全量复制等场景。
3>RDB恢复数据的速度比AOF快
RDB缺点:
1>RDB无法做到实时持久化,宕机时具有丢失数据的可能
2>RDB数据量大时I/O性能低下
##2.AOF方式
AOF(append only file)持久化,以日志的方式记录每次写命令,重启时重新执行AOF文件中的命令达到恢复数据的目的。
AOF写数据具有三种策略
1>always(每次)
每次写入操作均同步到AOF文件中,数据零误差,性能低。
2>everysec(每秒),redis默认选用
每秒将缓冲区中的指令同步到AOF文件中,数据准确率较好,性能较高,在系统宕机的时候存在1s内的数据丢失的可能。
3>no(系统控制)
由操作系统控制每次同步到AOF文件的周期,整体过程不可控。
修改redis.conf配置文件中的如下部分

1>启用aof模式
appendonly yes
默认aof文件名称,默认写数据策略。
AOF重写
随着redis写入命令逐步增多,aof文件会越来越大。为了解决这个问题,redis引入了重写机制来压缩文件。aof重写机制:将同一个key的若干条命令执行的结果转换成最终结果对应的指令进行记录。举例如下:
如果redis连续收到如下指令:
set zs
set li
set ww
incr num
incr num
incr num
正常来说,redis会记录每条指令,那么如上情况,redis得记录6条指令到aof文件。我们仔细分析下,如上6条指令其实可以转换成如下2条有效指令
set ww
incr num 3
redis的重写机制就是将如上6条指令转换成如上2条指令的过程。
AOF重写机制的好处
1>降低磁盘占用量,毕竟6条指令变成了2条,占用存储会小些。
2>提高磁盘I/O性能,6条指令要读写磁盘6次,2条指令只需2次。
3>提高持久化效率,写2条指令比写5条指令快。
AOF重写方式
1>手动重写,bgrewriteaof
2>自动重写
auto-aof-rewrite-min-size 自动重写size大小,默认64M
auto-aof-rewrite-percentage 文件增量百分比
2.1>自动重写触发参数比对
aof_current_size aof当前文件大小
aof_base_size aof基准文件大小
2.2>自动重写触发条件
情况1:aof_current_size > auto-aof-rewrite-min-size
假设当前aof文件为80M,那么就会触发重写条件,对aof文件进行重写
情况2:(aof_current_size - aof_base_size)/aof_base_size >= auto-aof-rewrite-percentage
假设aof_current_size=80M,aof_base_size设置50M,那么百分比值为(80-50)/50=60%。假设auto-aof-rewrite-percentage为15%,那么这种情况已经触发重写机制了。
##3.RDB与AOF使用场景对比

RDB与AOF使用场景对比
1>对数据非常敏感,例如银行转账,建议采用AOF作为持久化方案
2>数据允许一定时间范围内的误差,例如某篇新闻的评论/点赞等,采用RDB方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章