Redis的优点:将数据存在内存中而不是硬盘中,降低读写的速度,性能极好。
缺点:内存中的数据是易失的,Redis重启后数据将会丢失。将Redis用作缓存服务器时,缓存被穿透时会对性能产生极大的影响。
解决方法:持久化
RDB方式:
通过快照完成,将数据生成备份存储在硬盘上。
快照的条件:
根据配置规则进行自动快照;
执行save或者bgsave命令;
执行flushall命令;
执行复制时;
Redis持久化的方式是通过快照,当符合一定条件时,Redis自动将内存的所有数据生成一份副本并存储到硬盘上,这个过程称为快照。
快照原理:
Redis首先fork一个子进程,父进程继续接收客户端命令,子进程将内存中的数据写进硬盘的临时文件(这个临时文件是当前Redis进程工作目录中的dump.rdb文件);当子进程写入完所有数据后用临时文件替换旧的rdb文件;Redis启动后读取rdb文件。
save:当save命令执行时,阻塞所有客户端的请求,因此会造成此时的长时间不响应。
bgsave:可以边快照边处理客户端的请求,
flushall:执行这个命令时,Redis会清除掉数据库所有数据,并执行一次快照操作。
执行复制时:从数据库启动后,向master发送SYNC命令,此时master做一次RDB持久化,并且将快照文件和缓存命令发给slave,此时复制初始化完成,随后master收到一条命令同步给slave,保证主从一致。
AOF方式持久化:
当使用Redis存储非临时数据时,打开AOF持久化来降低进程中止导致的数据丢失。AOF可以将Redis每一个写的命令追加到硬盘文件中。
配置appendonly yes
执行一条命令向硬盘中AOF文件写入一条,显然对性能会有很大的影响
实际上,由于OS的缓存机制,此时数据还在缓存中,30秒同步一次,此时还是有可能会丢失。
通过配置appendfsync everysec设置为每秒同步一次。
浙公网安备 33010602011771号