redis持久化数据

redis与memcached等缓存系统有一个最大的区别就是可以定期将内存中的数据保存到硬盘中,以实现数据持久化,redis实现数据持久化有两种方式:第一种是RDB快照方式;另外一种是AOF方式

一、RDB持久化

RDB持久化是根据一定的保存规则定期对redis在内存中的数据做一个快照,把快照数据同步到硬盘上,每次的快照文件就是一个保存着redis数据的二进制文件。它也是redis默认的持久化方法。

1、RDB保存快照文件的过程
  • (1)redis快照启动后,创建一个当前进程(父进程)的副本(子进程)。

  • (2)父进程继续接受来自客户端的命令,子进程将内存中的数据开始同步到硬盘中,保存到一个临时文件中。

  • (3)子进程完成快照后,快照的临时文件替换旧的快照文件,并断开与父进程的连接。

2、RDB持久化配置

在redis 3.0的配置文件第142到144行

  1. save 900 1
  2. save 300 15

这是一个保存的规则,即当在什么条件下开始快照

  • 第一条的意思是在900秒内,至少有1个键的值发生改变时才快照

  • 第二条的意思是在300秒内,至少有15个键的值发生改变时才快照

注:如果不想启用RDB持久化,将save参数删除掉或者注释掉即可

3、RDB其他配置
(1)持久化文件保存目录(包括RDB文件和AOF文件)
  1. dir ./
(2)RDB持久化保存文件名
  1. dbfilename dump.rdb
(3)当保存时遇到错误是否停止写入
  1. stop-writes-on-bgsave-error yes
(4)保存文件时是否启用压缩
  1. rdbcompression yes
(5)是否启用RDB数据检验:

RDB文件结尾会放置一个CRC64的检验码,这个检验码是为了更加有效的减少数据文件损坏,但是这对redis性能有一定影响

  1. rdbchecksum yes
4、RDB持久化数据存在的问题:

因为RDB是保存开始快照那个时刻的内存中的数据,从那个时刻起的新的数据并没有保存,所以保存的数据并不完整和实时。

二、AOF持久化

AOF持久化是将用户操作的命令(主要对修改数据的命令,就是除了查询以外的命令,包括增删改的命令)保存到一个文本文件中。

AOF持久化配置

(1)开启或关闭aof持久化:(约在配置文件504行)
  1. appendonly yes
(2)用于保存AOF持久化的文件名:
  1. appendfilename "appendonly.aof"
(3)AOF文件同步频率:

启用AOF持久化,并不是马上将内存数据写到文件中,它是将它写到硬盘缓存中,然后根据一定频率同步到文件中,这个同步频率如下设置:

  1. appendfsync everysec

共有三个值可选择:

  • always表示只要有更新就同步;
  • everysec是每秒种同步一次;
  • no表示不同步
(4)AOF文件重写设置

为了节省空间,AOF这种方式可以将一些相同的作品合并起来,如:

  1. set name withec
  2. set name shixinke

因为两个命令都是设置name这个键值,因此只需要保存最后一次的设置即可,所以启用重写时,会将相同的命令进行合并。

  • a)在不启用硬盘缓存同步到硬盘文件这个选项时,是否重写文件
    1. no-appendfsync-on-rewrite no
  • b)重写文件的频率:
    1. auto-aof-rewrite-percentage 100
    2. auto-aof-rewrite-min-size 64mb
  • 针对以上问题的重写条件:

    • 第一种表示当文件超过旧文件100%时进行重写

    • 第二种表示当文件超过64mb时进行重写

  • c)当redis遇到退出时,重新载入时是否加载异常出现时的残余数据

    1. aof-load-truncated yes