一、Redis 持久化操作:
Redis把内部数据以文件形式在硬盘中保存一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)里,数据保存到硬盘的过程就称为“持久化”效果。
redis有两种持久化功能:
一种是“快照持久化(RDB)”:默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不合适频繁操作该持久化操作
一种是“AOF持久化”:把用户执行的每个“写”指令(添加/修改/删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。开启AOF持久化(会清空redis内部的数据,最好在redis使用之前就开启它)
二、者优缺点:
1.1 RDB优点
1). 整个Redis数据库将只包含一个文件,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
2). 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。
3). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。
4). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。
1.2 RDB缺点:
1).系统在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
2.1AOF的优点:
1). 对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。
2). 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
3). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。我们也可以通过该文件完成数据的重建。
2.2 AOF的缺点:
1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。
二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)。
三、持久化实现
3.1 RDB 持久化数据会根据redis.conf配置文件,中指定的文件名和路径rdb文件
dbfilename dump.rdb #指定rdb持久化的文件名
dir ./ #指定保存的路径在redis根目录下
3.1.1查看一下redis目录下生成的rdb文件
3.1.2 保存的频率
save 900 1 #900 秒内如果超过 1 个 key 被修改,则发起快照保存 save 300 10 #300秒超过10个key被修改,发起快照 save 60 10000 #60秒超过10000个key被修改,发起快照
如果发现dump.rdb文件缺少了最近的记录,那么在这补充一种手动持久化方式,可以立即看到效果,执行此命令
./redis-cli bgsave #异步保存
3.2 AOF持久化
把用户执行的每个“写”指令(添加/修改/删除)都备份到文件中,还原数据的时候就是执行具体写指令。
在redis.conf文件中开启
appendonly yes #启用AOF持久化
appendfilename "appendonly.aof" # 持久化文件名字
# appendfsync always
appendfsync everysec
# appendfsync no
always 一写指令就备份一次。这样做虽然安全,但是系统性能会降低。不推荐使用 everysec 每一秒中备份一次。不管一秒钟变化了多少key,只备份一次,性能得到一定的保护。推荐使用。 no 会查看当前服务器状态,如果状态良好,就进行备份(随机)。这种备份方式数据是没有保证的
重启服务器,用配置文件的形式启动,这样你配置的生成目录才会起作用。
./redis-server /usr/local/redis-5.0.4/redis.conf
3.2.2 生成文件路径,目前得大小是0
/usr/local/redis-5.0.4/src/my_append.aof
3.2.3 存入数字
客户端写入数据
再去查看aof文件,文件大小已发生变化