Redis将信息保存在内存
内存的特征就是一旦断电,所有信息都丢失,对于Redis来讲,所有数据丢失,就需要从数据库从新查询所有数据,这个是慢的
更有可能,Redis本身是有新数据的,还没有和数据库同步就断电了
所以Redis支持了持久化方案,在当前服务器将Redis中的数据保存在本地硬盘上
Redis持久化策略有两种
RDB
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。
单机游戏到存档点存档,随后前往下一个存档点时,获取了其他物资,被击杀了会从上一次存档点复活,恢复至当时存档状态。
缺点:丢失数据
执行时机
RDB持久化在四种情况下会执行:
-
执行save命令
save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。 -
执行bgsave命令
执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。 -
Redis停机时
Redis停机时会执行一次save命令,实现RDB持久化。 -
触发RDB条件时
Redis内部有触发RDB的机制、
RDB原理
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。
fork采用的是copy-on-write技术:
-
当主进程执行读操作时,访问共享内存;
-
当主进程执行写操作时,则会拷贝一份数据,执行写操作。
AOF
AOF是AppendOnly File的缩写,是Redis系统提供了一种记录Redis操作的持久化方案。
在AOF生成的文件中,将忠实记录发生在Redis的操作,从而达到在Redis服务器重启或者宕机之后,继续恢复之前数据状态的机制。
记录所有操作信息并保存,若Redis服务器宕机,可读取这些数据进行恢复。
类似于运行sql文件。
开启AOF作为持久化机制:
-
修改redis配置文件中的appendonly参数为yes
优点:
-
占用内存小,备份数据更加可靠
缺点:
-
备份文件体积很大(比数据本身大),恢复数据速度慢