APP开发对于Redis数据库两种机制的了解
Redis是一个支持持久化操作的内存数据库,通过持久化机制把内存中的数据保存在硬盘文件。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。Redis常用的持久化机制有下面两种。
·RDB
·AOF
深圳APP开发公司就为您详细讲述这两种持久化机制
1. RDB机制
RDB是Redis默认的持久化方式,这种方式是按照一定的时间周期策略把内存的数据以快照的形式写入到硬盘的二进制文件。RDB默认的数据文件是dump. rdb,该数据文件能在配置文件中修改。
下面是Redis配置文件中有关RDB的主要参数
dbfilename dump. rdb#快照的文件名
dir /var/lib/redis/6379#快照保存的路径
save 900l #当有1个数据被改变时,900秒刷新到硬盘次
save 300 10 #当有10个数据被改变时,300秒刷新到硬盘次
save 60 10000 #当有10 000数据被改变时,60秒刷新到硬盘次
执行RDB持久化的过程如图7-19所示
APP开发示意图之7-19RDB持久化的过程
在图7-19中.RDB持久化的过程如下
l.根据配置文件中执行RDB的时机.Redis调用fork生成子进程,这样就有了Redis的子进程和父进程。
2.父进程继续处理客户端发送的请求,子进程把其内存的数据写入到临时文件由于Linux操作系统的特性,父进程和子进程会共享相同的内存空间,所以子进程的数据是和fork时Redis中内存的数据样的。
3.子进程写入临时文件完毕后,用临时文件替换RDB的数据文件子进程退出。
需要注意的是,每次持久化的过程都是把Redis内存数据完整地写入到磁盘,并不是只写入修改的数据,因此,如果Redis内存数据量大那么就会造成频繁的写入操作,可能会严重影响性能。
由于RDB的方式是每隔一段时间才把内存数据持久化,如果Redis意外退出会丢失最后次持久化后的所有数据。为了防止这个问题,可以采用下面介绍的另外种持久化方式AOF。
2.AOF机制
使用AOF的持久化方式,Redis会把每个写入命令通过write函数追加到持久化文件中(默认文件是Appendonlv. aof)当Redis重启的时候会通过执行持久化文件的写命令重建内存数据。
由于Linux会把对文件的写入数据通过buffer缓冲,因此Linux可能不是立即写入到文件,有丢失数据的风险。在Redis的配置文件中,可以通过相应的配置选项告i斥Redis需要通过fsvne函数强制Linux写入到磁盘的时机。下面是Redis配置叉件中有关AOF持久化的主要参数
Appendonly no #是否开启AOF的持久化方式
Appendfilename”Appendonly.aof” #AOF文件的名称,默认为Appendonly.aof
# Appendfsyne always #每次收到写命令就立即强制写入到磁盘,能保证完全持久化,但速度也最慢,不推荐
Appendfsyne everysec #每秒钟强制写入磁盘次,在性能和持久化方面做了很好的折中,推荐
# Appendfsyne #完全依赖Linux.性能最好,但持久化没保证
用AOF的持久化方式会慢慢出现一个问题:AOF文件会变得越来越大。例如,有一个写命令“set n um l”,然后执行了100次写命令“incr num”,这时num的值为101这100次“lncr”操作都会记录到持久化文件,但重建内存数据时,实际只需要执行“set nu m 101”就可以了,无须先执行“set nmn 1”在执行100次“iucr nuni”。
为了压缩AOF文件,Redis提供了bgrewriteaof命令,Redis收到这个命令后台以类似创建RDB文件的方式将内存数据以命令的形式保存到临时文件中,最后替换原文件。
下面是Redis配置文件中有关bgrewriteaof命令的主要参数
no-Appendfsync -nor rewrite yes #在日志重写时,不进行命令追加,而将其放在缓冲区中
aut-aof-rewrite -prcentage 100 #当前AOF文件大小是上次日志重写的AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb #当前AOF文件重写的最少值
当“auto-aof-rewrite-perceutage”和“auto-aof-rewrite-min-size”这两个条件部满足时,才会触发bgrewriteaof命令。
执行bgrewriteaof命令过程如图7-20所示。
APP开发执行bgrewriteaof命令过程示意图
图7-20执行bgrewriteaof命令过程如下
l.Redis调用fork生成于进程,这样就有了Redis的子进程和父进程。
2.父进程继续处理客户端发送的请求,子进程把内存数据以命令的形式写入到临时文件。由于Linux操作系统的特性,父进程和子进程
会共享相同的内存空间,所以子进程的数据是和fork时Redis中内存的数据一致的。
3.在子进程写临时文件的过程中,父进程把收到的写命令缓存起来。
4.子进程写入临时文件完毕,子进程通知父进程,父进程把缓存中的写入命令追加到临时文件
5.临时文件替换AOF文件,父进程继续把新增的写命令追加到AOF文件,子进程退出。好了,APP开发公司本文对Redis数据库的特性以及操作流程经验分享就到这里。谢谢关注,博纳网络编辑整理。