redis缓存持久化

1:RDB,是redis database backup file(redis数据备份文件,或者redis数据快照).简单来说就是把内存中的所有数据都记录在磁盘中.当redis实例故障重启,从磁盘读取快照文件,恢复数据

命令:

       redis-cli

       save 由Redis的主进程来执行RDB,会阻塞所有命令

       bgsave:由Redis 的子进程来执行RDB,避免主进程受影响

以上是主动备份,redis的配置文件redis.conf 

save 900 1 900秒内有1个key被修改会执行bgsave

同理 save 300 10 300秒内有10个key被修改会执行bgsave

RDB执行原理:

     需要写入RDB的数据存放在物理内存中,但是linux不能直接从物理内存中取得数据,操作系统会开辟一个虚拟内存,并生成一个页表来存储虚拟内存和物理内存的映射关系,主进程会fork一个子进程,并把页表复制给子进程,这样子进程可以直接从页表中获取数据写一个新的RDB文件替换掉旧的RDB文件,.这时如果主进程执行了写操作,可能会导致脏数据,为了避免这种情况,fork采用copy-on-write技术,物理内存中的数据会拷贝一份,将写数据在拷贝的内存中执行,读数据也会在拷贝的数据中.

2.AOF是Append Only File(追加文件),Redis处理每一个写命令都会记录在AOF文件中,可以看作是命令日志文件

 命令: 

           redis -cli

           set num 123

AOF默认关闭,需要修改redis.conf配置文件来开启AOF: 

appendonly  yes  (默认是no)  

appendfilename "appendonly.aof"

AOF的记录频率也可以通过redis.conf文件来配

appendfsync.always  表示每执行一次写命令,立即记录到AOF文件

appendfsync everysec 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件中,是默认方案 

appendfsync no 写命令执行完毕先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

推荐 appendfsync everysec 优点:性能适中,最多丢失一秒的数据

AOF执行原理::AOF是记录命令,会存在对同一个key的多次写操作,但只有最后一次写操作才有意义.通过执行bgrewriteof命令,可以让AOF文件执行重写功能,用最少的命令达到相同的效果.

自动触发配置:auto-aof-rewrite-percentage 100  AOF文件比上次文件增长多少百分比触发重写

             auto-aof-rewrite-min-size 64mb  AOF文件体积最小多大才触发重写