redis持久化配置

Redis十一个内存数据库,数据时存储在内存中的,因此缓存数据丢失问题一直是程序员们相当关注的话题,因此对缓存中的数据定时进行持久化的必要性就相当突出了,redis提供了两种持久话方案,分别是rdb(redis database)和aof(append od file)

一、rdb持久化

redis持久化是redis默认的持久话方案,不许要通过修改redis.conf配置文件来启动,默认redis是会以快照的形式将数据持久化到磁盘的(dump.rdb,这个文件名字可以指定),在配置文件中的格式是:save N M表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。当然我们也可以手动执行save或者bgsave(异步)做快照。

工作原理:

  • Redis forks 一个子进程开始将数据写到临时RDB文件中,当子进程完成写RDB文件,用新文件替换老文件

1.1 修改配置文件redis.conf, 120秒内对redis进行5修改

redis.conf配置文件:

1)

#  save ""

save 900 1

save 120 5

save 60 10000

2)

# The filename where to dump the DB

dbfilename dump.rdb   #rdb文件名称配置
3)

# Note that you must specify a directoryhere, not a file name.

dir ./ #rdb文件路径配置

二、aof持久化方案

    2.1 简介

        当rdb方法进行持久化方案进行持久化时,当redis突然异常死掉时,最近的数 据会丢失(丢失数据的多少视你save策略的配置),所以这是它最大的缺点,当业务量很大时,丢失的数据是很多的。aof方法可以做到全部数据不丢失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no),appendonly yes开启AOF之后,redis每执行一个修改数据的命令,都会把它添加到aof文件中,当redis重启时,将会读取AOF文件进行“重放”以恢复到 redis关闭前的最后时刻

   2.2 配置

AOF文件刷新的方式,有三种,参考配置参数appendfsync :

appendfsync always         每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全;

appendfsync everysec     每秒钟都调用 fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据;

appendfsync no               依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差。默认并推荐每秒刷新,这样在速度和安全上都做到了兼顾。

appendonly yes              //启用aof持久化方式
# appendfsync always        //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec       //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no           //完全依赖os,性能最好,持久化没保证

 2.3.当appendonly.aof损坏

 当 appendonly.aof损坏,导致redis无法启动时,可以通过 ./redis-check-aof --fix appendonly.aof 来恢复appendonly.aof文件,但是有可能会丢失部分数据

 2.4 aof文件重写(压缩)

     在实际生产中,aof往往会特别大,redis提供了对aof进行重写的方案,默认情况下redis会记录上次写aof文件时,aof文件的大小,当aof的文件大小是上次写的时候的两倍,而且aof文件爱你的大小大于64mb时候,就会对aof文件进行重写压缩,默认配置

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

 另外还可配置重写aof文件时,是否启动 ppendfsync(时间间隔),按默认配置,为no时就行,保证数据安全性

no-appendfsync-on-rewrite no

 

 

 

原文地址:https://www.cnblogs.com/520playboy/p/6017414.html